让我们说我希望我的页面标题会根据一个非常简单的字段而改变,这是Ember的做法吗?
我真的不明白Ember中的绑定,即使我只需要1个字段,我还要创建一个对象吗?
Ember是否支持双向绑定?如果它这样做我怎么能将绑定限制为单向?
我觉得我对Ember-data& amp;常规的Ember,当我使用Ember数据时,我是否需要关心绑定?
提前致谢:)
答案 0 :(得分:11)
这有点模糊(或者我只是不完全明白你要问的是什么),所以我会采取猎枪方法,当你提出更多问题时我们可以缩小范围。
前言:Ember Data是一个客户端记录管理库,如果没有它,Ember完全没用。
页面的标题有点棘手,因为它超出了可视dom的范围,但处理它的最好方法是观察者。在下面的示例中,随着title
属性在我的应用程序控制器内部发生变化,我设置了document.title。
App.ApplicationController = Em.Controller.extend({
title:undefined,
watchTitle: function(){
document.title = this.get('title');
}.observes('title')
})
示例:http://emberjs.jsbin.com/haducafu/1
Ember确实支持单向绑定(尽管你很少需要关心绑定)。通常,您希望关注依赖属性。例如,如果属性a已更改,则属性b应更新等。在下面的情况中,b是计算属性,取决于a,如果更改,则b为脏,并且ember应重新计算它。
App.ApplicationController = Em.Controller.extend({
a:'foo',
b: function(){
return 'Hello: ' + this.get('a');
}.property('a')
})
示例:http://jsbin.com/haducafu/2/edit
此外,Ember只能进行简单的绑定(实际上你可以跳过定义名称,因为ember会在第一次使用它时定义它。)
App.ApplicationController = Em.Controller.extend({
name:undefined
});
<h2>Hello {{name}}</h2>
Name: {{input value=name}}
示例:http://jsbin.com/haducafu/3/edit
一种方法是从其主机属性获取值,除非你设置它,如果你设置它,它会在依赖属性之后停止并变为它自己的(不修改依赖属性)。
只读将从主机属性中获取值,如果您尝试设置它,它将会破坏块。
App.ApplicationController = Em.Controller.extend({
name:'billy',
oneWay: Em.computed.oneWay('name'),
readOnly: Em.computed.readOnly('name')
});
首先尝试更改名称,他们将全部更新,然后更改oneWay
并且它将分歧并且永不返回,然后更改readOnly
并且会抛出错误。