Emberjs单向和双向绑定?

kfi*_*124 1 ember.js

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

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

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

我觉得我对Ember数据和常规Ember有点困惑,当我使用Ember数据时,我是否需要关心绑定?

提前致谢 :)

Kin*_*n2k 11

这有点模糊(或者我只是不完全理解你在问什么),所以我会采取猎枪方式,当你提出更多问题时我们可以缩小范围.

前言:Ember Data是一个客户端记录管理库,Ember在没有它的情况下完全正常工作.

标题

页面的标题有点棘手,因为它超出了可视dom的范围,但处理它的最佳方法是观察者.在下面的示例中,随着title属性在我的应用程序控制器内部发生变化,我正在设置document.title.

App.ApplicationController = Em.Controller.extend({
  title:undefined,
  watchTitle: function(){
    document.title = this.get('title');
  }.observes('title')

})
Run Code Online (Sandbox Code Playgroud)

示例: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')      
})
Run Code Online (Sandbox Code Playgroud)

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

简单的绑定

另外Ember可以做简单的绑定(你实际上可以跳过定义名称,因为ember会在第一次使用它时定义它).

App.ApplicationController = Em.Controller.extend({
  name:undefined       
});

<h2>Hello {{name}}</h2>
Name: {{input value=name}}
Run Code Online (Sandbox Code Playgroud)

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

单向/只读:

一种方法将从其主机属性获取值,除非您设置它,如果您设置它,它将停止在依赖属性之后并成为它自己的(不修改依赖属性).

只读将从主机属性中获取值,如果您尝试设置它,它将吹出块.

App.ApplicationController = Em.Controller.extend({
  name:'billy',
  oneWay: Em.computed.oneWay('name'),
  readOnly: Em.computed.readOnly('name')
});
Run Code Online (Sandbox Code Playgroud)

首先尝试更改名称,他们将全部更新,然后更改oneWay,它将分歧,永远不会返回,然后更改readOnly,它将抛出错误.

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