从视图中向集合中添加模型的最佳方法是什么?
What is the best way to add model in a collection from view?
我有一个带有路由器和控制器的 Backbone Marionette 应用程序。在我的应用程序中,您可以查看文本集合(从服务器获取集合的索引路由),可以查看现有的文本集合(不从服务器获取的 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) {
???
}
});
}
});
好的,我的问题解决方案就在这里。在控制器操作中 "form" 我创建事件侦听器
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);
}
}
});
就这些:)
我有一个带有路由器和控制器的 Backbone Marionette 应用程序。在我的应用程序中,您可以查看文本集合(从服务器获取集合的索引路由),可以查看现有的文本集合(不从服务器获取的 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) {
???
}
});
}
});
好的,我的问题解决方案就在这里。在控制器操作中 "form" 我创建事件侦听器
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);
}
}
});
就这些:)