2013-09-21 3 views
2

Это моя проблема:Backbone сбросить коллекцию на выборку

  • У меня есть вид контейнера, который содержит коллекцию.
  • На странице загрузки я получаю некоторые модели, заполнить эту коллекцию с ними, а затем делают эти модели
  • I огнь и событие
  • Когда это событие срабатывает, я хочу, чтобы сделать вызов моей API (который возвращает модель, основанную на входных параметрах)
  • затем я хочу, чтобы удалить все существующие модели из коллекции, заселить с моими новыми моделями, а затем сделать модели

Это, как я создал свою модель/сбор/вид

var someModel = Backbone.Model.extend({}); 

var someCollection = Backbone.Collection.extend({ 
    model: someModel, 
    url: "api/someapi" 
}); 

var someView = Backbone.View.extend({ 

    events: { 
     "click #refresh": "refreshCollection" 
    }, 

    initialize: function() { 
     this.collection.bind("reset", this.render, this); 
    }, 

    render: function() { 
     // render stuff 
    }, 

    refreshCollection: function (e) { 
     this.collection.fetch({data: {someParam: someValue}); 
     this.render(); 
    } 

}); 

var app = function (models) { 
    this.start = function() { 
     this.models = new someCollection(); 
     this.view = new someView({collection: this.models}); 
     this.view.reset(models); 
    }; 
}; 

Моя точка интереса здесь:

refreshCollection: function (e) { 
     this.collection.fetch({data: {someParam: someValue}); 
     this.render(); 
    } 

Я прохожу в некоторых PARAMATERS, и мой апи возвращает JSON массив моделей. Я хочу избавиться от всех существующих моделей в коллекции и поместить все мои возвращенные модели в коллекцию, а затем обновить представление (с помощью render())

Я понимаю, что это возможно с помощью коллекции collection.set или collection .сброс. Оба они занимают множество моделей. Я не массив моделей, чтобы пройти в

Я попробовал:.

this.collection.fetch({ 
    data: {someParam: someValue}, 
    success: function (response) { 
     doSomethingWith(response.models) 
    } 
}); 

Но я не знаю, что делать с моделями, когда я получаю их.

Любое нажатие в правильном направлении было бы оценено!

ответ

8

От fine manual:

выборкиcollection.fetch([options])

[...] Когда вернется модель данных с сервера, он использует набор к (разумно) объединить неправдоподобные модели, если вы не пройдете {reset: true}, и в этом случае коллекция будет (эффективно) reset.

Так что вам просто нужно включить reset: true в настройках и fetch будет вызывать reset заменить содержимое коллекции с надуманными моделями:

this.collection.fetch({ 
    data: { ... }, 
    reset: true 
}); 
+0

Это не работает. Я сделал console.log (this.collection.models) до и после выборки (с сбросом: true). Коллекция не изменилась. У вас есть идеи, почему это не сработает? –

+0

Что говорит 'console.log (this.collection.toJSON())' сказать до и после вызова 'fetch'? Вы уверены, что ждали, пока сервер не ответит на вызов «fetch» ​​AJAX? –

+0

Ahhh. Я новичок в javascript и асинхронном образе мышления. Так оно и было. –

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