2014-01-28 2 views
0

Ember Data имеет метод reload; Я использую более базовый подход (using Ember objects), чтобы обслуживать мои модели.Обновить модель текущего маршрута без данных Ember

Я хочу, чтобы пользователь мог перезагрузить модель для текущего маршрута посредством действия, например, нажата кнопка. Возможно ли это без данных Ember?

+0

Если вы не используете уголек-данных , вы, вероятно, используете $ .getJSON для получения ваших данных. Таким образом, чтобы снова получить данные, вы снова должны сделать один и тот же ajax-вызов через событие маршрута (которое вы можете использовать DRY с использованием общего метода) или программно с помощью определенного метода действий в вашем контроллере. – borisrorsvort

+0

Как вы храните это состояние без данных ember? У вас есть модель с reopenClass (чтобы держать один массив в приложении глобально?) –

+0

@ToranBillups Да, я использую Ember.Object и reopenClass, чтобы создать новый метод и вернуть этот метод из моего крюка модели маршрута. – davidpmccormick

ответ

0

Вопрос был асинхронной характер AJAX звоните, я делаю.

Это не сработало: this.set('model', App.MyObject.findAll(value));

мне нужно разрешить вызов AJAX, чтобы вернуть ответ, затем заполнения модели:

var that = this; 

App.MyObject.findAll(value).then(function(response) { 
    that.set('model', response); 
}); 
1

Вот очень простой пример того, как я это делаю с вашим подходом (обратите внимание на «ясный»).

Вы можете использовать clear + find со своего маршрута/контроллера/независимо. Я также добавил «beforeSend» в $ .ajax в некоторых из моих больших приложений (это будет вызывать прозрачный для вас, прежде чем XHR разрешен)

App.Person.reopenClass({ 
    people: Ember.A([]), 
    clear: function() { 
     this.people = Ember.A([]); 
    }, 
    add: function(hash) { 
     var person = App.Person.create(hash); 
     this.people.pushObject(person); 
    }, 
    remove: function(person) { 
     this.people.removeObject(person); 
    }, 
    find: function() { 
     var self = this; 
     $.getJSON('/api/people', function(response) { 
      response.forEach(function(hash) { 
       var person = App.Person.create(hash); 
       Ember.run(self.people, self.people.pushObject, person); 
      }); 
     }, this); 
     return this.people; 
    } 
}); 
Смежные вопросы