我如何知道是否修改了enyo.Model?

时间:2014-12-18 02:14:11

标签: javascript enyo

我有这个代码 但是当我点击按钮测试时,不要在我的应用程序中输入函数modelChanged,只有当de model创建时才输入 代码在此链接中:http://jsfiddle.net/bs38A/16/

enyo.kind({
    name: "App",
    bindings: [
        {from: ".model.foo", to: ".$.notFoo.content"}
    ],
    components: [
        {classes: "onyx-toolbar-inline", components:[
            {content: "model's 'foo' property:"},
            {name: "notFoo"}
        ]},
        {kind: "onyx.Button", content: "Test", ontap: "test"}
    ],
    test: function() {
        var m = this.model;
        m.set("foo", "model");
    },
    modelChanged: function(){
        this.inherited(arguments);
        console.log("Change Model");
    }
});
enyo.kind({
    name: "MyModel",
    kind: "enyo.Model"
});
var app = new App().renderInto(document.body);
var model = new MyModel({foo: "bar"});
app.set("model", model);

2 个答案:

答案 0 :(得分:1)

您的代码目前仅触发一次(当您执行app.set("model", model);时。因为更改模型上的属性实际上并未更改model的{​​{1}}属性,{{1}事件未被触发。

如果您希望在模型的任何属性发生更改时收到通知,您将需要使用其他方法。你想看的是Event Emitter mixin的文档:http://enyojs.com/docs/latest/#/mixin/enyo.EventEmitter

你会想做这样的事情:

App

这将监控任何变化。您可能希望更具体,例如使用modelChanged代替create: function() { this.inherited(arguments); this.model.on("*", this.modelUpdated, this); }, modelUpdated: function(sender, e, props) { this.log("Model was updated"); } 。如果要监视模型上特定属性的更改,则需要子类化Model并在模型中放置更改处理程序。

答案 1 :(得分:0)

这是因为当设置App的model属性时,会执行modelChanged()函数。由于enyo.Model不是enyo.Component,因此它不会获得自动propertyChanged功能。检查如何在此处添加观察者http://enyojs.com/docs/latest/developer-guide/building-apps/managing-data/building-data-driven-apps.html#observers