2012-03-06 79 views
1

是否可以动态创建绑定?说我有一个名为“App.obj”有2个属性“阿尔法”和“贝塔”的对象,我想在两个地方使用相同的视图中使用它:在创建对象时动态创建绑定 - 可能吗?

{{view App.AView name="alpha"}} 

{{view App.AView name="beta"}} 

该视图旨在绑定到App.obj的'alpha'或'beta'属性,具体取决于它的名称属性设置为什么,这样当绑定属性发生更改时,视图也会发生更改。因此,这里练习的重点是,如果给定对象的两个非常类似的属性,我可以创建一个绑定到其中任何一个的单个视图,并在该属性更改时自行更新。

是否有可能使视图对象绑定到App.obj上的alpha或beta动态基于在创建时用'name'传入的内容?

感谢

回答

2

为什么你不只是做{{view App.AView name="alpha" objBinding="App.obj"}},然后在你的App.AView的定义:

App.AView = Ember.View.extend({ 

didInsertElement: function() { 
    var name = this.get('name'); 
    var objAlpha = this.getPath('obj.alpha'); 
    var objBeta = this.getPath('obj.beta'); 

    if(name == 'alpha') { 
     console.log(objAlpha); 
    } else if (name == 'beta') { 
     console.log(objBeta); 
    } 
} 
}); 

我在this jsFiddle一个完整的例子。只要看看你的控制台。

+0

那么重点是,如果视图应该绑定到对象的alpha或beta属性,那么当视图发生更改时,视图也会发生更改。这只会使用视图创建时的属性值,对吧?我应该在原始问题中真正澄清这个问题...... – 2012-03-06 18:53:07

+1

因此,您有一个对象'App.obj',其属性为'.alpha'和'.beta',并且您希望具有'App.getPath('obj.alpha') '绑定到定义为'{{view App.AView name =“alpha”}}'的视图。所以'App.getPath('obj.alpha')'会返回上面提到的Ember.View实例?如果是这样,我会对你的设计有一些主要问题......在你的澄清中,你可以更具体地确定你想要解决什么问题?代码示例会有很大帮助。把我上面的jsFiddle叉起来,修改它来证明你遇到的任何问题。我会很高兴看看:) – 2012-03-06 19:32:53

+0

我只是按下ctrl-r而不是ctrl-s在jsfiddle中,并且失去了我所有的工作。我现在不打算重做它,所以我只是将对象上的所有属性添加到视图的计算属性上的依赖关系列表,因此解决了我的问题 - 如何使1视图看起来完全相同相同,但基于可配置参数提供对象的不同属性。 – 2012-03-06 23:23:19