#ember.js #handlebars.js
#ember.js #handlebars.js
Вопрос:
Я поддерживаю приложение в Ember, и это «вычисляемое свойство» на самом деле никогда не вычисляется помощником if
блока в шаблоне.
Модель:
var item = App.Item.create({
isAddedToCart: function () {
console.log('addedToCart method has been called');
return false;
}.property()
});
Шаблон:
{{#if item.isAddedToCart}}
{{log 'true'}}
{{else}}
{{log 'false}}
{{/if}}
В моем компоненте, который находится в шаблоне, console.log()
никогда не вызывается, но функция, похоже, проверяется, соответствует ли она действительности или нет. Что-то не так в моем подходе?
Редактировать: приложение написано на Ember версии 1.7 (я знаю …)
Комментарии:
1. Я не думаю, что вы можете создать вычисляемое свойство внутри
create({...})
. Можете ли вы попробовать это сextend({...}).create();
, Но это выглядит как старый эмбер, так что,…2. Наверное, вы
.set()
isAddedToCart
где-то есть? При этом вы переопределяете вычисляемое поведение.3. @Lux хороший ответ, но я нигде не переопределял свойство, оно предназначено исключительно для чтения.
4. @Keo он старый, 1.7. Я обновил вопрос, но он не дает мне покоя, как сумасшедший.
Ответ №1:
Какие версии вы используете в настоящее время, на самом деле я попробовал то, что вы сделали в ember версии 1.12.2, и я получил следующие утверждения, которые четко объясняют, как это решить.
Ошибка при обработке маршрута: ошибка утверждения индекса: Ember.Object.create больше не поддерживает определение вычисляемых свойств. Определите вычисляемые свойства с помощью функции extend() или reopen() перед вызовом функции create(). Ошибка: Ошибка утверждения: Ember.Object.create больше не поддерживает определение вычисляемых свойств. Определите вычисляемые свойства с помощью функции extend() или reopen() перед вызовом функции create().
Я создал образец twiddle, чтобы продемонстрировать использование,
controllers/application.js
import Ember from 'ember';
var App.Item = Ember.Object.extend({
});
App.Item.reopen({
isAddedToCart: function () {
console.log('addedToCart method has been called');
return false;
}.property()
});
export default Ember.Controller.extend({
appName: 'Ember Twiddle ',
itemObj : App.Item.create(),
});
и в application.hbs,
{{itemObj.isAddedToCart}}
Может быть для более ранней версии, если ember позволяет то, что вы сделали, может возникнуть проблема ниже,
— убедитесь item
, что свойство доступно в шаблоне
— проверьте переопределение любого места или ручного набора для isAddedToCart
Комментарии:
1. Спасибо. На данный момент мне повезло бы использовать 1.12. В настоящее время приложение написано на версии 1.7, которая, я не думаю, устарела от этого метода. Я обновлю вопрос
2. @SimonStiph обновил мой ответ таким образом, как вы можете реорганизовать свой код.. Есть ли какое-либо узкое место для рефакторинга вашего кода? .. в любом случае, при обновлении вы придете к этому коду рефакторинга.