2013-02-13 2 views
2

У меня есть простая часть моего приложения Ember, которое должно нарисовать список книг. Проблема в том, что если пользователь посещает список до того, как книги будут загружены с сервера, список будет пустым. Даже после того, как данные закончат загрузку, список все равно будет пустым.Как обновить шаблоны в Ember при добавлении/удалении данных?

Какие методы требуется, чтобы Ember обновил представление после загрузки данных? И где было бы подходящим местом для размещения этого кода? Вот что мой код выглядит следующим образом:

Маршрут:

App.MyRoute = Ember.Route.extend({ 
    model: function() { 
    return App.store.find(App.Book); // get books from the server 
    } 
}); 

Шаблон:

{{#each book in model}} 
    <li {{ bindAttr data-book-id="book.id" }}> 
    <span>{{ book.name }}</span> 
    </li> 
{{/each}} 

Для записи, я хотел бы сделать что-то вроде этого:

{{#if model.get('isLoaded')}} 
    {{#each book in model}} 
    <li {{ bindAttr data-book-id="book.id" }}> 
     <span>{{ book.name }}</span> 
    </li> 
    {{/each}} 
{{else}} 
    <span>Loading books...</span> 
{{/#if}} 
+0

У помощника '{{each}}' также есть '{{else}}', в котором вы бы добавили прядильщик для своего списка, почти так же, как и для отдельного элемента. Что касается заполнения списка, вам не нужно вручную вызывать какой-либо метод, поскольку инфраструктура отвечает за заполнение записей в «ModelArray», которые он вам дал. Если он не может заполнять данные, даже если он получает JSON из вашего backend API, проблема должна быть в вашем магазине/адаптере/сериализаторе или формате JSON. Что вы посылаете? как вы настроили свой магазин? – MilkyWayJoe

+0

Ах, вот и все. В моей модели «model» я фактически конвертирую «ModelArray» в обычный массив JavaScript и использую это как модель (хотя я не показывал это в моем коде выше). Вот почему Ember не обновляется автоматически. Если вы опубликуете официальный ответ, я приму это. Благодаря! – NudeCanalTroll

+0

Добавлен ответ из комментария – MilkyWayJoe

ответ

1

As как указано в моем комментарии выше, помощник {{each}} также имеет {{else}}, где есть вы добавили бы счетчик для вашего списка, почти так же, как и для отдельного элемента. Что касается заполнения списка, вам не нужно вручную вызывать какой-либо метод, так как структура отвечает за заполнение записей в ModelArray, которые он вам дал. Если он не может заполнять данные, даже если он получает JSON из вашего backend API, проблема должна быть в вашем магазине/адаптере/сериализаторе или формате JSON. Нужно проверить, какая часть отправки в качестве ответа и как настроено хранилище (адаптер/сериализатор/и т. Д.), Чтобы правильно перевести ответ JSON в то, что Ember-Data ожидает как достоверные данные для моделей приложений.

+0

Спасибо! В качестве продолжения, поскольку Ember обнаруживает изменения только на объектах определенного типа (например, «RecordArray»), как я могу изменить эти объекты таким образом, чтобы Ember все еще обнаруживал изменения? Например, предположим, что я только хотел показать книги, чьи имена начинаются с «А». Если я использую функцию 'filter', она, похоже, преобразует' RecordArray' в обычный JavaScript-массив ... – NudeCanalTroll

+0

вы можете обновить свои вопросы с более подробной информацией и, если возможно, создать образец в [jsfiddle.net] (http: //jsfiddle.net) с тем, что вы делаете/пытаетесь сделать? – MilkyWayJoe

+0

Хм, я подумал об этом немного, и я думаю, что правильный ответ заключается в том, что мои маршруты должны просто установить «RecordArray» в качестве модели, а затем изменения в этой модели должны быть сделаны в контроллере. – NudeCanalTroll

Смежные вопросы