您的示例代码存在一些问题,我会解决每个问题,希望我能解决一些问题。
命名约定
首先你应该看看 Emberist 关于命名约定的帖子:类应该命名为大写,实例命名为小写——应用程序和命名空间的例外。因此,在您在评论中提供的 JSFiddle 中,它是App.controller
and App.ATextField
。
将 App 声明为全局变量
您正在创建 an 的实例Ember.Application
并将其分配给var app
. 尽管在使用全局变量时应该小心,但在这种情况下,您应该在全局命名空间上定义您的应用程序,因此应该App = Ember.Application.create();
分别为window.App = Ember.Application.create();
. 通过将应用程序声明为全局变量,您可以在模板和 JS 代码中使用强大的绑定功能。
绑定
绑定应该在实例而不是类上声明。我的意思是你不会在你的类定义中定义valueBinding
你的App.TextField
,而是将它移动到具体实例中,例如在模板中。
在您在评论中提供的 JSFiddle 中,您与控制器的绑定不起作用,因为您没有使用:要创建与特定控制器/对象/的绑定...您必须声明要绑定的属性名称并附加一个Binding
字符串。所以它会disabledBinding: 'App.controller.shouldDisable'
。
例子
我已经重构了您的代码,请参阅http://jsfiddle.net/pangratz666/pLpKV/:
车把:
{{view Ember.TextField
valueBinding="App.tempObj.hold"
disabledBinding="App.controller.shouldDisable"}} {{App.tempObj.hold}}
JavaScript:
App = Em.Application.create();
App.controller = Em.Object.create({
shouldDisable: true
});
App.tempObj = Em.Object.create({
hold: "initial value"
});
// just to illustrate how to define bindings outside of templates,
// we're adding a TextField with bindings setup the same as for the
// template
Ember.TextField.create({
valueBinding: 'App.tempObj.hold',
disabledBinding: 'App.controller.shouldDisable'
}).appendTo('body');