Emberjs单程&双向绑定?

时间:2014-06-01 15:34:56

标签: ember.js

让我们说我希望我的页面标题会根据一个非常简单的字段而改变,这是Ember的做法吗?

我真的不明白Ember中的绑定,即使我只需要1个字段,我还要创建一个对象吗?

Ember是否支持双向绑定?如果它这样做我怎么能将绑定限制为单向?

我觉得我对Ember-data& amp;常规的Ember,当我使用Ember数据时,我是否需要关心绑定?

提前致谢:)

1 个答案:

答案 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并且会抛出错误。

示例:http://jsbin.com/haducafu/4/edit