骨干this.model.set不起作用

时间:2013-05-03 14:03:12

标签: backbone.js

由于某种原因,this.model在我的editUsp方法中不起作用。我想用.set更改模型中的值。

有人知道吗,我做错了什么?

我收到了这个错误:

Uncaught TypeError: Object function (){ return parent.apply(this, arguments); } has no method 'set' 

这是代码:

var Usp = Backbone.Model.extend();

var widgetView = Backbone.View.extend({
    model: Usp,
    initialize: function (data,collection) {
        var usp = new Usp({type:'usp', items: data});
        collection.add(usp);
        this.render(data);
    },
    events: {
            "click .edit":   "editUsp",
    },
    editUsp: function(){
        this.model.set({type:'uspsss',items: 'hoi'});
    },
    render: function(data){
        var uspList = '<ul>';
        $.each(data['Usps'], function(i,item){
            uspList += '<li>'+item+'</li>';
        });
        var template = _.template('<div class="block"><a class="edit"><i class="icon-edit"></i> Edit </a><%= uspList %></div>');
        var widgetView = template({uspList: uspList});
        this.setElement(widgetView);
        $('.laySidebar .smallBlocks').append($(this.el).hide().fadeIn(700));
    }
    });

2 个答案:

答案 0 :(得分:2)

您需要在视图中引用模型的实例。

例如:

var usp = new Usp();

现在您有一个模型实例。将其传递给您的视图实例

var widgetViewInstance = new widgetView({model: usp});

从widgetView定义中删除以下行:

model: Usp,

休息应该可以正常工作。

答案 1 :(得分:1)

而不是第一行中的Backbone.Model.extend(...),请改为尝试...

var Usp = new Backbone.Model();

extend(...)只是扩展了Backbone.Model类。要执行set,您需要一个模型实例。