Ember.js中的Subscriber/Observer模式
Subscriber/Observer pattern in Ember.js
是否可以在Ember.js中使用subscriber/observer模式?例如,视图A和视图B都侦听模型C内部的更改。这需要模型C能够触发自定义事件。我一直在想如何在Ember.js中创建一个模型触发事件,但到目前为止没有成功。
我相信您正在寻找的功能在Ember.js.中被称为"绑定"
主页上有很多例子描述了如何按照你的建议行事,但这里有一个简短的回顾:
window.MyApp = Ember.Application.create();
MyApp.MyModel = Ember.Object.create({
myProperty: "Hello World!",
goodbye: function() {
this.set("myProperty", "Goodbye!");
})
});
MyApp.modelInstance = MyApp.MyModel.create();
现在在<body>
标签中创建两个视图:
<script type="text/x-handlebars">
View1: <b>{{MyApp.modelInstance.myProperty}}</b>
</script>
<script type="text/x-handlebars">
View2: <b>{{MyApp.modelInstance.myProperty}}</b>
</script>
现在,页面应该进行渲染,您将看到两个视图都显示"Hello World!"。打开控制台并键入
MyApp.modelInstance.goodbye();
你会看到你的观点改变,说"再见!"。
视图通过使用双大括号自动创建到MyApp.modelInstance.myProperty
的绑定,但您可以通过多种方式创建绑定。每当myProperty
的值发生更改时,所有绑定都将自动更新。但是,请注意,您必须调用set("myProperty", "something new")
,以便Ember知道为您更新绑定;如果你只说myProperty = "something new"
,它不会触发任何更改事件。
至少在Sproutcore中,这就是绑定的用途。
如果你有一个型号
App.Person = SC.Object.extend({
name: 'Bruce Banner'
});
然后你就会有一个像这样的控制器
App.personController = SC.ObjectController.create();
然后,您可以在控制器上设置内容
App.personController.set('content', somePerson);
现在,任何视图都可以绑定到模型对象上的数据。
SC.LabelView = SC.LabelView.extend({
...
valueBinding: 'App.personController.name'
})
因此,如果你更改名称
somePerson.set('name', 'Chris');
视图将自动更新。
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- 带有let的JS/EECMAScript6私有字段的模式
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 执行动态模式弹出
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- AngularJS ui路由器html5模式中断路由
- 包含圆括号的JavaScript Regex模式
- 显示模块模式在Knockout中设置模型的新实例
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 使用模式格式化Number类型输入中的值
- 以PubSub/Observer模式对事件进行排队
- Ember.js中的Subscriber/Observer模式