所以我最近在Em.TextField中找到了disabled属性,但是在我将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
});
Run Code Online (Sandbox Code Playgroud)
如何使用Ember删除已禁用的属性?
您的示例代码存在一些问题,我将对每个问题进行处理,并希望我能清除一些问题.
命名惯例
首先,您应该看一下有关命名约定的Emberist帖子:类应该命名为UpperCase,实例是lowerCase - 应用程序和命名空间的异常.所以在你提供的JSFiddle中你的评论是App.controller
和App.ATextField
.
将App声明为全局变量
您正在创建一个实例Ember.Application
并将其分配给var app
.虽然在使用全局变量时应该小心,但在这种情况下,您应该在全局命名空间上定义应用程序,因此它应该App = Ember.Application.create();
分别window.App = Ember.Application.create();
.通过将应用程序声明为全局变量,您可以在模板和JS代码中使用强大的Bindings功能.
绑定
绑定应该在实例上声明,而不是在类上声明.我的意思是你不会在你的类定义中定义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}}
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)