【问题标题】:Sencha Touch: ScriptTagProxy url for create/update functionalitySencha Touch:用于创建/更新功能的 ScriptTagProxy url
【发布时间】:2011-08-02 23:27:53
【问题描述】:

我有一个 ScriptTagProxy 并且能够接收数据,但现在我想更新一条记录。我指定了一个网址,但只有一个网址。我是否必须使用此 url 处理所有操作(读取、更新、创建、删除)? 如果是:如何将操作应用于 url? 如果不是:我如何指定更多网址?

这是我目前的代码:

app.stores.entries = new Ext.data.Store({
    model: "app.models.Entry",
    storeId: 'app.stores.entries',
    proxy: {
        type: 'scripttag',
        url: 'http://myurl.de/getEntries.php',
        extraParams: {
            username: Ext.util.JSON.decode(window.localStorage.getItem('settings')).username,
            password: Ext.util.JSON.decode(window.localStorage.getItem('settings')).password
        },
        reader: {
            type: 'json'
        },
        writer: {
            type: 'json'
        }
    }
});

我在文档中读到,您可以将配置对象传递给模型的保存函数以配置代理。

所以我尝试了以下操作:

entry.save({
            url: 'http://mysite.com/updateEntry.php',
            extraParams: {
                username: Ext.util.JSON.decode(window.localStorage.getItem('settings')).username,
                password: Ext.util.JSON.decode(window.localStorage.getItem('settings')).password,
                entry: entry
            },}

如您所见,指定了一个 url。 但我仍然得到错误: 未捕获的错误:您正在使用 ServerProxy,但尚未为其提供 url。 );

例如使用 AjaxProxy 或 RestProxy 时的行为相同:(

【问题讨论】:

    标签: javascript sencha-touch


    【解决方案1】:

    赫林,

    你问的第一个代码块:

    问题 1)“我是否必须使用此 url 处理所有操作(读取、更新、创建、删除)?”

    答案是肯定的。

    问题 2)“如果是:如何将操作应用于 url?”

    根据 Sencha 源代码,你需要像这样定义 actionMethods:

    myApp.stores.Things = new Ext.data.Store({
    model: "Things",    proxy: {
        type: 'ajax',
        actionMethods: {
            create: 'POST',
            read: 'GET',
            update: 'PUT',
            destroy: 'DELETE'
        },
        url: 'jsontest.json',
        reader: {
            type: 'json',
            root: 'things'
        }
    },
    autoLoad: true
    

    });

    如果您删除、创建或编辑记录,您必须调用:

    store.sync();

    还有一个“autoSave”属性,但它只在编辑时同步,而不是在删除时同步。

    这会将已更改或已删除的内容作为请求负载的一部分发送,您有责任解析 json 并处理它。

    【讨论】:

    • 你定义的actionMethods是默认值,所以这不会改变任何东西。我只是想 .save() 一个模型“实例”。这是发生错误的地方。我可以做一个 sync() 但这不会调用任何我可以在后端更新数据的 url。所以感谢您的回答,但它并没有解决问题:(
    • 我发现即使它们似乎是默认设置,但在我明确设置它们之前它实际上并没有那样工作。当我删除一个项目并执行 sync() 时,它仍然只是发送一个 POST。一旦我设置了它们,我就开始收到 DEL 和 PUT 请求。
    【解决方案2】:

    赫林,

    我正在阅读文档here,我在 Model 类中找到了这个示例:

    Ext.regModel('User', {
        fields: ['id', 'name', 'email'],
    
        proxy: {
            type: 'rest',
            url : '/users'
        }
    });
    

    但是上面你没有为 app.models.Entry 显示你的模型,你试过了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多