如何在Marionette.js中仅使用所需的API调用部分 使用以下代码:
/messages
返回JSON:
messages.foo
messages.read
messages.friend
messages.following
如何使用基于一次提取的Marionette View模型为3个不同区域创建三个不同的视图。 (在一个视图中读取/未读取会很好)
var MessageModel = Backbone.Model.extend({
urlRoot: '/messages',
});
var MessageCollection = Backbone.Collection.extend({
url: '/messages',
model: MessageModel,
});
var messages = new MessageCollection();
messages.fetch();
答案 0 :(得分:4)
所以我认为你想要的是一个控制器。控制器可以充当您的视图和实体之间的中间人(即模型和集合)。
不是直接调用视图,而是调用获取实体的控制器,完成后实例化相应的视图。
以下是一个例子:
var MyView = Marionette.View.extend({
// ... view options
});
var MyCollection = Backbone.Collection.extend({
// ...
});
var MyController = Marionette.Controller.extend({
initialize: function(options) {
var self = this;
this.entity = options.entity;
this.region = options.region;
this.entity.fetch({
success: function() {
self.showBaseView();
}
});
},
getBaseView: function() {
return new MyView({ collection: this.entity });
},
showBaseView: function() {
this.region.show(this.getBaseView());
}
});
var controller = new MyController({
entity: new MyCollection(),
region: App.mainRegion
});
虽然这只使用一个视图和一个区域,但您可以配置此视图,但需要依赖于您的应用。它的原理是Controller充当一个入口点,处理使用一个实体渲染多个视图/区域所需的所有依赖项。
您可以在此处看到一个非常简单的示例:https://github.com/tnbKristi/kristi-yo/blob/master/app/scripts/modules/home/components/skills/skills-controller.js
答案 1 :(得分:1)
这是Ref Link在下面 http://www.codeproject.com/Articles/698645/A-Beginners-Guide-for-Creating-Single-Page-Applica
var book = new Book({BookName: "Backbone Book 1"});
book.save({}, {
success: function (model, respose, options) {
console.log("The model has been saved to the server");
},
error: function (model, xhr, options) {
console.log("Something went wrong while saving the model");
}
});
答案 2 :(得分:1)
如果我理解你的问题,下面的代码可以帮助使用解析函数。 只要服务器在fetch中返回集合的模型,Backbone就会调用parse。该函数传递给原始响应对象,并应返回要添加到集合中的模型属性数组。默认实现是无操作,只是通过JSON响应。如果您需要使用预先存在的API,或者更好地命名您的响应,请覆盖此项。
var MessageModel = Backbone.Model.extend({
urlRoot: '/messages',
});
var MessageCollection = Backbone.Collection.extend({
url: '/messages',
model: MessageModel,
parse:function(response){
// here you can manipulate your collection value depending on the response
var myFilteredData = [];
myFilteredData = myFilteredData.push(response.foo);
myFilteredData = myFilteredData.concat(response.followings);
// or whatever you need
return myFilteredData;
}
});
var messages = new MessageCollection();
messages.fetch();