所以我最近在Em.TextField中找到了disabled属性,但是在我将其设置为true的情况下将其扩展后,我似乎无法重新启用TextField。
var app = Em.Application.create();
app.randomObj = Em.Object.create({
temp: null
});
app.textField = Em.TextField.extend({
valueBinding: 'app.randomObj.temp',
disabled: true
});
如何使用Ember删除已禁用的属性?
答案 0 :(得分:7)
您的示例代码存在一些问题,我会解决每个问题,希望我能澄清一些问题。
命名惯例
首先,您应该查看关于naming conventions的Emberist帖子:类应该命名为UpperCase,实例lowerCase - 应用程序和命名空间的异常。所以在你提供的JSFiddle中comment App.controller
和App.ATextField
。
将App声明为全局变量
您正在创建Ember.Application
的实例并将其分配给var app
。虽然在使用全局变量时应该小心,但在这种情况下,您应该在全局命名空间上定义应用程序,因此它应分别为App = Ember.Application.create();
window.App = Ember.Application.create();
。通过将应用程序声明为全局变量,您可以在模板和JS代码中使用功能强大的 Bindings 功能。
<强>绑定强>
绑定应该在实例上声明,而不是在类上声明。我的意思是你不会在类定义中定义valueBinding
App.TextField
,而是将其移动到具体实例,例如在模板中。
在您提供的comment中的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');
答案 1 :(得分:2)
将它绑定到控制器,您可以随意切换它。 Disabled是绑定属性,因此当属性更改时,模板将更新。