2015-11-25 1 views
0

У меня есть приложение марионеток с базовой сетью с маршрутизатором и контроллером. В моем приложении вы можете просмотреть коллекцию текстов (индексный маршрут с извлечением коллекции с сервера), просмотреть существующую коллекцию текстов (маршрут indexPage без выборки с сервера) и создать новый текст (маршрут формы). Виды текстов списков и форма создания отличаются друг от друга и изменениями в регионе.Каков наилучший способ добавления модели в коллекцию из представления?

Я хочу добавить успешно сохраненную модель в коллекцию, а затем перенаправить на маршрут indexPage, но каков наилучший способ получить коллекцию текстов из обратного вызова с успешным обращением _FormView? Или как изменить приложение, чтобы сделать его простым?

Я могу отправить событие контроллеру с Backbone.Radio, но хочу иметь дело без него.

Маршруты

router.processAppRoutes(controller, { 
    '': 'index', 
    'index': 'indexPage', 
    'create': 'form' 
}); 

Контроллер

_Controller = Marionette.Controller.extend({ 
    initialize: function() { 
     this.list = new _MainTexts(); 
    }, 
    index: function() { 
     if (!_.size(this.list)) { 

      var 
      self = this; 

      this.list.fetch({ 

       success: function (collection, response, options) { 
        self.indexPage(); 
        return; 
       } 
      }); 
     } 
     this.indexPage(); 
    }, 
    indexPage: function() { 

     var 
     textsView = new _TextsView({ 
      collection: this.list 
     }); 
     application.getRegion('contentRegion').show(textsView); 
    }, 
    form: function() { 

     var 
     formView = new _FormView({ 
      model: new _MainText() 
     }); 
     application.getRegion('contentRegion').show(formView); 
    } 
}); 

Просмотров

_TextView = Marionette.ItemView.extend({ 

    className: 'item text', 
    template: function (serialized_model) { 
     return _.template('<p><%= texts[0].text %></p>')(serialized_model); 
    } 
}); 

_TextsView = Marionette.CollectionView.extend({ 
    className: 'clearfix', 
    childView: _TextView 
}); 

вид Форма

_FormView = Marionette.ItemView.extend({ 
    template: '#form-template', 
    ui: { 
     text: 'textarea[name="text"]', 
     submit: 'button[type="submit"]' 
    }, 
    events: { 
     'click @ui.submit': 'submitForm' 
    }, 
    submitForm: function (event) { 

     event.preventDefault(); 
     this.model.set({ 

      text: this.ui.text.val() 
     }); 

     this.model.save({}, { 
      success: function (model, response, options) { 

       ??? 
      } 
     }); 
    } 
}); 
+0

«* можно просмотреть существующую коллекцию текстов (indexPage маршрут без выбор из сервера) и может создать новый текст (маршрут формы) "* ... Я не уверен, являются ли эти вопросы или заявления ... *" Представления текстов списков и формы создания отличаются друг от друга и изменения регион. "* список текстов ... создать форму ... Я понятия не имею, что это такое. Не могли бы вы прочитать этот вопрос с точки зрения человека, который не имеет представления о вашем заявлении и переформулирует вопрос соответственно? .. –

+0

@TJ Хорошо, возможно, я поставил вопрос несколько хаотично, но я уже нашел решение. Опубликовать решение немного позже. – Evgeniy

+0

Примечание: «Объект Controller устарел. Вместо использования класса Controller с AppRouter вы должны указать свои обратные вызовы на простом объекте Javascript или объекте Marionette« - http://marionettejs.com/docs/v2. 4.4/marionette.controller.html – misantronic

ответ

0

Хорошо, мое решение проблемы здесь. В действии контроллера «форма» Я создаю слушателя событий

var 
formView = new _FormView({ 

    model: model 
}); 

formView.on('formSave', function (model) { 

    if (id == null) { 

     self.list.add(model); 
    } 

    ... 
}); 

Тогда в представлении формы я вызвать событие

this.model.save({}, { 

    success: function (model, response, options) { 

     if (response.state.success) { 

      self.trigger('formSave', model); 
     } 
    } 
}); 

Это все :)