Emberjs - 禁用并启用TextField

mli*_*nau 5 ember.js

所以我最近在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删除已禁用的属性?

pan*_*atz 7

您的示例代码存在一些问题,我将对每个问题进行处理,并希望我能清除一些问题.

命名惯例

首先,您应该看一下有关命名约定的Emberist帖子:类应该命名为UpperCase,实例是lowerCase - 应用程序和命名空间的异常.所以在你提供的JSFiddle中你的评论App.controllerApp.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)