2012-03-22 77 views
0

我遇到了backbone.js模型的問題。我有一種觀點,即創建另一個視圖,並在其中創建一個新模型。但所有的觀點似乎都是參考相同的模型。下面是一些代碼。沒有創建獨特的模型? Backbone.js

DesignView

menu: function(ev) { 
     var menu = new MenuView({}); 
     console.log(menu); 
     ev = this.relativeEvData(ev); 
     menu.model.set('x',ev.relX); 
     menu.model.set('y',ev.relY); 
     this.$el.append(menu.render().el); 
     menu.addItem("cut","cut"); 
     console.log('click'); 

    } 

MenuView

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/menuItem.html', 
    'models/menuModel' 
    ], function($, _, Backbone, MenuItemTemplate, MenuModel){ 
    var MenuView = Backbone.View.extend({ 

    //... is a list tag. 
    tagName: "ul", 
    model: new MenuModel({}), 
    // Cache the template function for a single item. 
    template: null, 
    // The DOM events specific to an item. 
    events: { 

    }, 

    initialize: function() { 
     _.bindAll(this, 'render'); 
     this.model.bind('change', this.render); 
     this.$el.addClass("contextMenu"); 
     this.$el.css('display','block'); 


    }, 

    // Re-render the contents of the todo item. 
    render: function() { 
     console.log(this.model); 
     this.$el.html(this.model.get('items').join('')); 
     //update position 
     this.$el.css('top',this.model.get('y') + 'px'); 
     this.$el.css('left',this.model.get('x') + 'px'); 

      return this; 
    }, 


    addItem: function(name,type) { 
     var items = this.model.get('items'); 
     items.push('<li class="' + type + '"><a href="#' + type + '">' + name + '</a><li>'); 
     this.model.set('items', items); 
     this.render(); 
    }, 


    // Remove the item, destroy the model. 
    clear: function() { 
     this.model.clear(); 
    } 
    }); 
     return MenuView; 
}); 

MenuModel

define(['underscore', 'backbone'], function(_, Backbone) { 
    var MenuModel = Backbone.Model.extend({ 

// Default attributes for the todo. 
defaults: function() { 
     return { 
      items:[], 
      x:0, 
      y:0 

     }; 

}, 

// nothing to initialize yet 
initialize: function() { 
}, 

// Remove this Todo from *localStorage*. 
clear: function() { 
    this.destroy(); 
}}); 
return MenuModel; 
}); 

所有MenuViews結束訪問相同的模型。我在這裏犯了什麼錯誤?

謝謝你的幫助。

+1

這很難說其中模型引用實際上可以傳遞給'ModelView' - 只有一個調用'new ModelView({});'實際上並沒有將模型傳遞給視圖。你確定你的代碼是完整的嗎?如果你把你的代碼放在http://www.jsfiddle.net – 2012-03-22 21:06:54

+1

這將是非常有用的在這裏有太多的代碼。真的,你無法找到一個關注這個問題的小例子嗎? – fguillen 2012-03-22 21:08:59

+0

model:new menuModel()不會將新模型傳遞給視圖? – 2012-03-22 21:19:09

回答

2

使用相同的模型。

跳過您的MenuView中的model: new MenuModel({}),

DesignView而不是

var menu = new MenuView({}); 

你應該創建你的模型,並將其傳遞給視圖,即

var model = new MenuModel(), 
    menu = new MenuView({model: model}); 
+0

非常感謝,我認爲我在發佈之前曾嘗試過類似於您的答案......顯然,我之前做錯了什麼。再次感謝,那個問題讓我更加頭痛。非常感激。 – 2012-03-23 03:25:34

+0

@MikeDepies太棒了!請不要忘記接受關閉它的答案! – ggozad 2012-03-23 14:56:26