更改元素状态时更改div(表示对象元素)背景颜色

时间:2011-03-22 08:58:46

标签: javascript dojo

如何在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背景的颜色。如何实现这个,是否有观察到这个问题?

1 个答案:

答案 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)来电。