Как нажимать/извлекать массивы в Ember.js?

Я могу включить массив в объект Ember и отобразить содержимое с помощью Handlebars. Однако я могу заменить содержимое массива только с помощью set(). Как я могу изменить содержимое массива, используя push/pop/etc. и все еще есть обновление привязок пользовательского интерфейса?

// JS
App.obj = Ember.Object.create({
    "things": ["1", "2"],
});
App.obj.set("things", ["1", "2", "3"]); // Works
App.obj.things.push("3"); // Doesn't Work

// HTML + Handlebars
{{#with App.obj}}
    <ul>
    {{#each things}}
        <li>{{this}}</li>
    {{/each}}
    </ul>
{{/with}}

person Luke Dennis    schedule 30.01.2012    source источник


Ответы (2)


Для работы с коллекциями Ember.js предоставляет класс-оболочку Array, Ember.Array/Ember.MutableArray.

Итак, вместо использования простого массива используйте это:

// JS
App.obj = Ember.Object.create({
    "things": Ember.A(["1", "2"])
});
App.obj.things.pushObject("3"); // pushObject notifies observers

// HTML + Handlebars
{{#with App.obj}}
    <ul>
    {{#each things}}
        <li>{{this}}</li>
    {{/each}}
    </ul>
{{/with}}
person Michael Siebert    schedule 30.01.2012
comment
Полезный справочник по pushObject и его друзьям (popObject, removeAt и т. д.): ember-docs .herokuapp.com/symbols/Ember.MutableArray.html - person Luke Melia; 01.03.2012
comment
Вот также полезный ответ, почему вам нужно использовать эти методы: stackoverflow.com/questions/14582759/ - person zigomir; 27.05.2013

Используйте экземпляр Ember.ArrayController, простое объявление массива с помощью [] также создаст массив класса Ember.ArrayController.

Если вы хотите добавить объект в конце Ember ArrayController, вы можете использовать метод addObject();

eg.

mutableArray:[],

setModel:function(){

var data1={'id':1,'name':'over'};
var data2={'id':3,'name':'out'};

this.get('mutableArray').addObject(data1);
this.get('mutableArray').addObject(data2);

/* To Add Object to middle of array at given index simply use the native array splice method */

var data1={'id':2,'name':'and'}
this.get('mutableArray').splice(1,0,data1);

return this.get('mutableArray')

}.property('mutableArray')
person Mad Scientist    schedule 07.08.2015
comment
Лучше избегать использования Ember.ArrayController сейчас, так как он устарел. Вместо этого используйте классы Ember.Array или Ember.ArrayProxy. - person SeanK; 10.08.2015