Tôi đang cố trả lời câu hỏi này: emberjs: add routes after app initialize()Chơi với Ember.Object.reopen(), tại sao tôi có những kết quả này?
Tôi bắt đầu chơi với Ember.Object.reopen(), để hiểu cách hoạt động và có thể tìm cách trả lời câu hỏi trước.
tôi cảm thấy một chút bối rối, và không hiểu hành vi của mã này:
jsfiddle: http://jsfiddle.net/Sly7/FpJwT/
<script type="text/x-handlebars">
<div>{{App.myObj.value}}</div>
<div>{{App.myObj2.value}}</div>
<div>{{App.myObj3.value}}</div>
</script>
App = Em.Application.create({});
App.MyObject = Em.Object.extend({value: 'initial'});
App.set('myObj', App.MyObject.create());
Em.run.later(function(){
App.get('myObj').reopen({
value: "reopenOnInstance"
}); // the template is not updated, 'initial' is still diplayed, but
console.log(App.get('myObj').get('value')); // print 'reopenOnInstance'
App.MyObject.reopen({
value: "reopenOnClass"
});
App.set('myObj2',App.MyObject.create()); // the template is updated and
console.log(App.get('myObj2').get('value')); //print 'reopenOnClass'
App.myObj3 = App.MyObject.create(); // the template is not updated but
console.log(App.myObj3.get('value')); // print 'reopenOnClass'
Em.run.later(function(){
App.get('myObj').set('value', "setWithSetter"); // the template is updated and
console.log(App.get('myObj').get('value')); // print 'setWithSetter'
App.get('myObj2').set('value', "setWithSetter"); // the template is updated and
console.log(App.get('myObj2').get('value')); // print 'setWithSetter'
App.myObj3.set('value', "setWithSetter"); // the template is not updated but
console.log(App.myObj3.get('value')); // print 'setWithSetter'
}, 2000);
},2000);
Nếu ai đó có thể giải thích những gì đang xảy ra, đặc biệt là lý do tại sao các mẫu đôi khi không được cập nhật, đôi khi được cập nhật và cũng có sự khác nhau giữa việc gọi số reopen
trên một lớp, gọi nó là gì và trên một cá thể.
Tất cả đều có ý nghĩa. Cảm ơn bạn rất nhiều bạn đã khai sáng cho tôi. Vì vậy, nếu tôi hiểu tốt, mở lại một thể hiện như tôi làm ở đây, có hành vi tương tự như làm 'App.get ('myObj'). Value = 'reopenOnInstance'' phải không? Tôi đã nhận thức được phương thức getPath, và bây giờ với ember mới nhất, get có cùng hành vi, bạn có thể làm 'obj.get ('otherObj.someProperty')'. –
Xem chỉnh sửa. Điều này có nghĩa rằng bạn là chính xác, thiết lập giá trị trực tiếp sẽ giống như một reopen trên một thể hiện. Nhưng nếu bạn có một cái gì đó ràng buộc với giá trị đó (chẳng hạn như giao diện người dùng) Ember sẽ ném một lỗi bởi vì "thiết lập" không được sử dụng (thực hiện một [fiddler] (http://jsfiddle.net/scispear/n5B5d/) để xem lỗi). – SciSpear
Cảm ơn bạn lần nữa vì đã chỉnh sửa :). Tôi nghĩ bây giờ câu trả lời đã hoàn thành vì tôi không còn gì để làm sáng tỏ. –