2012-05-09 42 views
5

Vì vậy, gần đây tôi đã tìm thấy thuộc tính bị vô hiệu hóa trong Em.TextField, tuy nhiên tôi dường như không thể kích hoạt lại TextField sau khi đã mở rộng nó với thuộc tính disabled được đặt thành true.Emberjs - Vô hiệu hóa và kích hoạt TextField

var app = Em.Application.create(); 
app.randomObj = Em.Object.create({ 
    temp: null 
}); 
app.textField = Em.TextField.extend({ 
    valueBinding: 'app.randomObj.temp', 
    disabled: true 
}); 

Làm cách nào để xóa thuộc tính bị vô hiệu hóa với Ember?

+0

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

Trả lời

7

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.controllerApp.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'); 
+0

Chà, điều này còn hơn cả mong đợi của tôi. Cảm ơn đã dành thời gian để thực sự giải thích vấn đề của tôi, tôi thực sự đánh giá cao nó. – mlienau

2

Kết nối với bộ điều khiển và bạn có thể chuyển đổi tùy ý. Bị vô hiệu hóa là thuộc tính bị ràng buộc, vì vậy khi thuộc tính thay đổi, mẫu sẽ cập nhật.

+0

Khi tôi liên kết nó với một bộ điều khiển tôi nhận được một cái gì đó như thế này trong HTML ' 'Chỉnh sửa: thêm một [fiddle] (http://jsfiddle.net/RPWnX/) – mlienau

+1

Bạn đặt đường dẫn ràng buộc trong một thuộc tính riêng biệt kết thúc bằng 'Ràng buộc', 'vô hiệu hóa' trong trường hợp này. –

+0

Hoạt động ngay bây giờ cảm ơn! – mlienau

Các vấn đề liên quan