【问题标题】:Emberjs one way & two way bindings?Emberjs 单向和双向绑定?
【发布时间】:2014-06-01 15:34:56
【问题描述】:

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

我不太了解 Ember 中的绑定,即使我只需要 1 个字段,我是否必须创建一个对象?

Ember 是否支持两种方式绑定?如果是这样,我怎样才能将绑定限制为单向?

我觉得我对 Ember-data 和常规 Ember 有点困惑,当我使用 Ember-data 时,我需要关心绑定吗?

提前致谢:)

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

    前言: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,它会抛出错误。

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

    【讨论】:

    • 谢谢我喜欢你改变标题的方式。我想做类似

      Hello {{user-name}}

      这样的事情,所以当你改变文本框时它会改变DOM

    • 当然,第二个或第三个示例将显示该示例。我正在处理真正的单向绑定的第四个
    • 哦,太好了,我试图让我的头 Emberlike 我太习惯 Angular 方式了
    • 我认为它们都很有趣,都有点曲线,但技术真的很酷,祝你好运!
    • 感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 2014-08-30
    • 1970-01-01
    • 2013-05-04
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    相关资源
    最近更新 更多