Có một số vấn đề với mã mẫu của bạn, tôi sẽ đề cập đến từng mã và hy vọng tôi có thể xóa một số thứ.
Naming Convention
Trước hết bạn nên có một cái nhìn tại các Emberist gửi về naming conventions: Các lớp nên được đặt tên chữ hoa và chữ thường trường hợp - ngoại lệ cho các ứng dụng và không gian tên. Vì vậy, trong JSFiddle được cung cấp của bạn trong số comment đó là App.controller
và App.ATextField
.
Tuyên bố ứng dụng như biến toàn cầu
Bạn đang tạo một thể hiện của một Ember.Application
và gán nó vào var app
. Mặc dù bạn nên cẩn thận khi sử dụng các biến toàn cầu, trong trường hợp này, bạn nên xác định ứng dụng của mình trên không gian tên chung, vì vậy nó phải là App = Ember.Application.create();
tương ứng window.App = Ember.Application.create();
. Bằng cách khai báo ứng dụng dưới dạng biến toàn cầu, bạn có thể sử dụng tính năng mạnh mẽ Bindings trong các mẫu và mã JS của mình.
Bindings
Các bindings cần được khai báo trên trường và không phải trên lớp. Bởi điều này tôi có nghĩa là bạn sẽ không xác định valueBinding
của App.TextField
trong định nghĩa lớp học của bạn, nhưng thay vì di chuyển này vào ví dụ cụ thể, ví dụ trong mẫu.
Trong JSFiddle được cung cấp trong comment ràng buộc của bạn với bộ điều khiển không hoạt động vì bạn không sử dụng: để tạo một ràng buộc cho một bộ điều khiển/đối tượng cụ thể ... bạn sẽ phải khai báo tên thuộc tính bạn muốn liên kết và nối thêm một chuỗi Binding
. Vì vậy, nó sẽ là disabledBinding: 'App.controller.shouldDisable'
.
Ví dụ
Tôi đã refactored mã của bạn, xem http://jsfiddle.net/pangratz666/pLpKV/:
tay lái:
{{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');
Tôi không chắc chắn những gì đã trở lại sau đó khi bạn đăng câu hỏi này, nhưng chắc chắn có thể xác định thuộc tính bị vô hiệu hóa trong chế độ xem mà không có bất kỳ ràng buộc điều khiển nào. – asaf000