5

因此,我最近在 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
});

如何使用 Ember 删除 disabled 属性?

4

2 回答 2

7

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

命名约定

首先你应该看看 Emberist 关于命名约定的帖子:类应该命名为大写,实例命名为小写——应用程序和命名空间的例外。因此,在您在评论中提供的 JSFiddle 中,它是App.controllerand 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');
于 2012-05-10T06:55:05.947 回答
2

将其绑定到控制器,您可以随意切换它。Disabled 是绑定属性,所以当属性改变时,模板会更新。

于 2012-05-09T23:46:11.993 回答