如何使用MarionetteJS来消费Api电话。

时间:2014-06-03 14:53:48

标签: ajax backbone.js marionette

如何在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();

3 个答案:

答案 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();