Я следую за documentation на emberjs.com, но не могу получить пример первых привязок для работы.Не удается получить привязку к ember для работы как задокументировано
Я создал jsfiddle для демонстрации. Что мне не хватает?
Я следую за documentation на emberjs.com, но не могу получить пример первых привязок для работы.Не удается получить привязку к ember для работы как задокументировано
Я создал jsfiddle для демонстрации. Что мне не хватает?
Ember.js использует концепцию RunLoop для обеспечения привязок, наблюдателей и т. Д.
Проблема заключается в том, что, установив свойство (bound) и сразу получив значение через console.log
, никакое событие не будет запущено, что вызовет RunLoop и, следовательно, синхронизирует изменения. Есть 2 отличных сообщения в блоге о RunLoop: Part 1 и Part 2. Хотя они нацелены на Sproutcore, концепция примерно такая же для Ember.js.
Существует два способа заставить ваш пример работать.
синхронизация с помощью Силы Ember.run.sync()
Поскольку состояние Документов, вызывая Ember.run.sync()
... является полезным способом немедленно заставить все привязки в приложении для синхронизации. Это оставляет такой код, см http://jsfiddle.net/pangratz666/cwR3P/
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// force bindings to sync
Ember.run.sync();
console.log(App.husband.get('householdIncome')); // 80000
// Someone gets raise.
App.husband.set('householdIncome', 90000);
// force bindings to sync
Ember.run.sync();
console.log(App.wife.get('householdIncome')); // 90000
Или второй вариант заключается в ...
Показать значения в представлении
Отображение свойств в представлении обрабатывает все материалы RunLoop для вас, см. http://jsfiddle.net/pangratz666/Ub97S/
Java Сценарий:
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// invoke function in 3000ms
Ember.run.later(function() {
// someone gets a raise
App.husband.set('householdIncome', 90000);
}, 3000);
Рули (вид):
<script type="text/x-handlebars" >
Wifes income: {{App.wife.householdIncome}}<br/>
Husbands income: {{App.husband.householdIncome}}
</script>
После настройки привязок вам нужно позвонить Ember.run.sync();
, чтобы дать циклу запуска Ember возможность синхронизировать перед вашими заявлениями журнала. Это удобный метод для тестирования с Ember, но обычно это не требуется в самих приложениях Ember.
С точки зрения, мы можем также использовать Ember.run.sync(), но только один вызов, то необходимо. http://jsfiddle.net/akLVy/10/ –
Молодцы, Клеменс - очень полезно! Я думаю, нам нужно объяснить это в документах намного лучше. Это не хорошее введение для новичков, когда один из примеров не запускается «как есть». –
Спасибо! Дэн, я полностью соглашусь. Это необходимо обновить в документах! – pangratz