Emberjs - 禁用并启用TextField

时间:2012-05-09 20:40:23

标签: ember.js

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

2 个答案:

答案 0 :(得分:7)

您的示例代码存在一些问题,我会解决每个问题,希望我能澄清一些问题。

命名惯例

首先,您应该查看关于naming conventions的Emberist帖子:类应该命名为UpperCase,实例lowerCase - 应用程序和命名空间的异常。所以在你提供的JSFiddle中comment App.controllerApp.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是绑定属性,因此当属性更改时,模板将更新。