【问题标题】:Dojox/app keeping models synchronized with storeDojox/app 保持模型与商店同步
【发布时间】:2014-08-25 14:37:42
【问题描述】:

我目前正在使用 dojox/app 创建一个 SPA,我现在开始添加商店和模型。我已经能够从 json 对象创建存储,从存储创建模型,并使用 dojox mvc 将字段绑定到模型。但是,我有一些我还不能做的事情:更新绑定到与第一个模型相同的商店的第二个模型。

我举个例子。我有这家店:

        win.global.modelApp = {}; 
        modelApp.names = {
            identifier: "id",
            items: [{
                "id": 1,
                "First": "John",
                "Last": "Doe",
            },{
                "id": 2,
                "First": "John2",
                "Last": "Doe",
            }]
        }

然后我在 config.json 文件中使用这个存储创建两个模型:

"stores": {
    "namesStore":{
        "type": "dojo/store/Memory",
        "params": {
            "data": "modelApp.names"
        }
    }
},

"models": {
    "namesXUnused": {
        "modelLoader": "dojox/app/utils/mvcModel",
        "type": "dojox/mvc/EditStoreRefListController",
        "params":{
            "store": {"$ref":"#stores.namesStore"}
        }
    },
    "namesXUnused2": {
        "modelLoader": "dojox/app/utils/mvcModel",
        "type": "dojox/mvc/EditStoreRefListController",
        "params":{
            "store": {"$ref":"#stores.namesStore"}
        }
    }
}

然后,在我的 HTML 文件中,我有一个绑定到namesXUnused(属性First)的字段,还有一个绑定到namesXUnused2(属性First)的字段。当我编辑第一个字段时,我有一个将这些更改提交到商店的按钮。我可以通过调试器看到存储数据已正确更新。但是,我无法让第二个字段反映更改。有没有办法从商店刷新或重新创建模型?

谢谢,

【问题讨论】:

    标签: model-view-controller dojo dojox.mobile dojox.app


    【解决方案1】:

    我认为你需要在 store 上设置 "observable": true 以使用 Observable 存储,因为你希望对存储的更新反映回模型。如果您有问题,dojox/app/tests(和 dojox/mvc/tests)中有示例,但只需添加: "observable": true,你的 namesStore 应该这样做。 “商店”:{ “名称商店”:{ "type": "dojo/store/Memory", “可观察”:是的, “参数”:{ “数据”:“modelApp.names” } } },

    问候, 埃德

    【讨论】:

    • 嗨,Ed,尝试了您的建议,但仍然无法按预期工作。问题是,当我提交第一个模型时,我看到如果我再次执行namesXUnused2.queryStore(),我会得到新的结果,我可以绑定observe 方法。但是,在 HTML 中,我使用以下语法进行绑定:<div data-dojo-type="dojox/mvc/Group" data-dojo-props="target: at(this.loadedModels.namesXUnused2, 'model')">,问题是此模型属性未反映更改。有任何想法吗?非常感谢
    • Ed,我显然已经通过在提交后获取新的查询结果解决了这个问题 (this.view.loadedModels.namesXUnused.commit(); this.view.loadedModels.namesXUnused2.model = this.view.loadedModels.namesXUnused2.query();)。我将实现一个通知机制,以确保提交触发绑定到同一存储的所有模型以刷新它们的数据。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2012-05-13
    相关资源
    最近更新 更多