骨干收集,后端混乱,牵线木偶实施

时间:2014-01-14 17:17:24

标签: javascript backbone.js marionette firebase restful-architecture

我是所有后端方面的新手,所以希望这是我要回顾的问题之一,并想“男人,这对我来说是愚蠢的”。让我开始吧。我想创建一个可以在屏幕上绘制矩形的应用程序。 每个矩形都是由ItemView表示的模型,每个屏幕都是由CollectionView表示的集合。一旦用户动态创建了矩形,就会将其添加到集合中。

当用户点击“新屏幕”按钮时,会发生以下情况

 MyController = Backbone.Marionette.Controller.extend({
  initialize:function() {
    i=0;
  },

  newScreen: function() { 
      i=i+1;
      this.collection = new Rectangles([],{id: i});
      routestring = "screen/"+i;
      router.navigate(routestring);
      canvas.show(new ScreenView({collection: this.collection})); 
  },
...

我为不同的屏幕使用迭代器,以便我的后端看起来像这样

demo.firebaseio.com/screens/1

我正在使用Firebase's backbone bindings,但我完全不知道如何访问已存储在服务器上的集合。原因是我希望能够浏览不同的屏幕,从该URL获取集合并渲染它......

这是我的收藏代码

Rectangles = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.id = options.id;
  },
  url: function() {
    return 'https://demo.firebaseio.com/screen/'+this.id;
  },

  model: Rectangle,
  firebase: function() {
    return new Backbone.Firebase("https://demo.firebaseio.com/screen/"+this.id)
  }
});

这是我的路由器代码!

var Router = Backbone.Marionette.AppRouter.extend({
  controller: myController,
      appRoutes: {
      '': 'newScreen',
      'screen/:number': 'doSomething'
    }
})

我愿意接受任何建议,而且我明白我可能做了一些可怕的错误!

1 个答案:

答案 0 :(得分:1)

以下内容应该有效:

Rectangles = Backbone.Collection.extend({
  firebase: new Backbone.Firebase("https://demo.firebaseio.com/screens/"+this.id),
});

但是,您需要调用Collection.sync()来初始获取数据。另一种方法是以Backbone.Firebase.Collection

的形式使用真正的实时集合
Rectangles = Backbone.Firebase.Collection.extend({
  firebase: new Firebase("https://demo.firebaseio.com/screens/"+this.id),
});

在这种情况下,您不必调用fetch / sync / save等。 - 该集合始终与Firebase保持同步。有关此方法的更多文档:http://firebase.github.io/backfire/