我有这个代码 但是当我点击按钮测试时,不要在我的应用程序中输入函数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);
答案 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