【发布时间】:2014-06-01 15:34:56
【问题描述】:
假设我希望我的页面标题会根据一个非常简单的字段而改变,Ember 的做法是什么?
我不太了解 Ember 中的绑定,即使我只需要 1 个字段,我是否必须创建一个对象?
Ember 是否支持两种方式绑定?如果是这样,我怎样才能将绑定限制为单向?
我觉得我对 Ember-data 和常规 Ember 有点困惑,当我使用 Ember-data 时,我需要关心绑定吗?
提前致谢:)
【问题讨论】:
标签: ember.js
假设我希望我的页面标题会根据一个非常简单的字段而改变,Ember 的做法是什么?
我不太了解 Ember 中的绑定,即使我只需要 1 个字段,我是否必须创建一个对象?
Ember 是否支持两种方式绑定?如果是这样,我怎样才能将绑定限制为单向?
我觉得我对 Ember-data 和常规 Ember 有点困惑,当我使用 Ember-data 时,我需要关心绑定吗?
提前致谢:)
【问题讨论】:
标签: ember.js
这有点含糊(或者我只是不完全理解你在问什么),所以我会采取猎枪方法,当你提出更多问题时,我们可以缩小范围。
前言: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 的计算属性,如果 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,它会抛出错误。
【讨论】:
Hello {{user-name}}
这样的事情,所以当你改变文本框时它会改变DOM