如何在Javascript或Dojo中实现观察者模式。我用Dojo创建了类
dojo.declare("ELEMENT", null, {
_id:0,
_status:''
constructor: function(id,status){
this.id=id;
this.status=status;
},
get_color:function(){
},
set_status:function(st){
this._status=st;
}
}
});
我创建了与元素相同的id的div。当我改变元素的状态时,我想改变div背景的颜色。如何实现这个,是否有观察到这个问题?
答案 0 :(得分:1)
使用Dojo 1.6。 Dijit有一个新的“手表”功能,可以很好地完成您想要的功能。它允许其他对象(即观察者)动态添加回调,这些回调将在类中的属性发生变化时触发。
但是,你真的不想要一个观察者模式。你想要的是在课堂上设置状态时做一些事情。这是确定性的;你并不是说任意数量的观察者对象现在都对设置的状态感兴趣。
在这种情况下,您可以在类中模拟定义“_attributeMap”,它会将某些属性/属性自动映射到该类中DOM元素的属性。在您的示例中,您可以在status属性映射上声明和属性map到类的样式。
您还可以提供_setXxxAttr函数来添加更多功能而不是直接映射。
你的例子不是正确的道场。它应该是这样的:
dojo.declare("ELEMENT", null, {
id: 0,
status: '',
/*constructor: no need. automatic.*/
_setStatusAttr: function(value) {
this.status = value;
dojo.style("someDomNode", "background-color", value === 'foo' ? "yellow" : "blue");
}
});
var newelement = new ELEMENT({id:123, status:'hello'});
newelement.get("id"); // Get id = 123
newelement.set("status", 'foo'); // Set status to 'foo'. _setStatusAttr is automatically run.
newelement.get("status"); // Get status = 'foo'
在Dojo术语中,_setXxxAttr
会自动重定向set("xxx", value)
来电。