2015-11-08 3 views
0

У меня была модель и представление, где представление выполняется до того, как модель извлекает данные. Когда я проверял в БД, значение сохраняется в БД, когда я вношу изменения в представление. Но я не могу получить значение через model.fetch(), пока отображается рендеринг.Данные модели извлекаются после разбора вида

define([ 
    "marionette", 
    "monet", 
    "modules/fetchParams/collections/fetchParamsListLevels", 
    "modules/fetchParams/views/fetchParamsLayoutView", 
    "modules/fetchParams/models/fetchParam" 
], function(Marionette, Monet, fetchParamListLevels, FetchParamsLayoutView,FetchParamModel){ 
    return Marionette.Module.extend({ 
     model:"", 
     onStart:function(){ 
      this.model =new FetchParamModel(); 
     }, 
     displayInRegionMarketParams:function(region){ 
      this.fetchModel("market"); 
      region.show(new FetchParamsLayoutView({model: this.model, title: " Market"})); 
     }, 
     displayInRegionShareParams:function(region){ 
      this.fetchModel("shares"); 
      region.show(new FetchParamsLayoutView({model: this.model, title: "Shares"})); 
     }, 
. 
. 
. 
fetchModel:function(type){ 
      this.model.setType(type); 
      this.model.fetch(); 
     } 

Я пробовал как показано ниже, но не смог найти решение. Дайте мне знать, чего я здесь не вижу.

this.listenTo(this.model, "change", this.render()); 

ответ

0

Похоже, вы случайно добавили скобки к вашему this.render обратного вызова. Точка обратного вызова заключается в том, что он будет вызван для вас, так что вам не нужно. Поэтому вы передаете его без круглых скобок слушателю событий, и он запустит его для вас.

Ваш код будет работать так:

this.listenTo(this.model, "change", this.render); 

Кроме того, если вы хотели бы выполнить что-либо только после того, как данные поступили от сервера, вы можете использовать обещание, которое возвращается из метода fetch() :

this.model.fetch().done(function(data, status, xhr){ 
    console.log(data, status, xhr); 
    /** update the view maybe */ 
}); 
+0

Спасибо за ваши данные. У меня возникло сомнение относительно model.fetch(), после того как model.fetch() завершает, автоматически ли оно задано для модели. Еще одна вещь, которую я попытался поместить в область запроса успешной обработки, есть проблема с регионом как «область как неопределенная» – CNKR

+0

Да, 'model.fetch()' автоматически устанавливает новые данные в модель, поэтому вы можете слушать к изменению с помощью 'listenTo', как в первой части моего ответа. – Yura

+0

Также регион может оказаться неопределенным, потому что вы теряете контекст, что означает, что «это» больше не является экземпляром объекта. – Yura