Backbone.js设置了View属性

时间:2014-12-10 20:11:54

标签: javascript backbone.js

我是Backbone的新手,我无法理解如何设置View的属性。我正在使用没有模型的视图。

这是视图:

var OperationErrorView = Backbone.View.extend({
    attributes: {},
    render: function(){
        var html = "<h3>" + this.attributes.get("error") +"</h3>";
        $(this.el).html(html);
    }
})

然后是:

if (errors.length > 0){
    errors.forEach(function(error){
        // var errorView = new OperationErrorView({attributes: {"error": error} });          Doesn't work
        var errorView = new OperationErrorView();
        errorView.set({attributes: {"error": error}})
        errorView.render()
        $("#formAdd_errors").append(errorView.$el.html());
    });
}

这样做的正确方法是什么?现在它不起作用:当我尝试未注释掉的方法时,它会给我错误TypeError: errorView.set is not a function,如果我以第一种方式尝试它,它就不会调用render()函数。

更新

var OperationErrorView = Backbone.View.extend({
    attributes: {},
    initialize: function(attributes){
        this.attributes = attributes;
    },
    render: function(){
        var html = "<h3>" + this.attributes.get("error") +"</h3>";
        console.log("html");
        $(this.el).html(html);
    }
})

if (errors.length > 0){
        errors.forEach(function(error){
            console.log(error);
            var errorView = new OperationErrorView({"error": error});
            errorView.render()
            $("#formAdd_errors").append(errorView.$el.html());
        });
    }

我尝试在initialize函数中包含this.render()。不行。甚至不调用渲染功能。为什么呢?

2 个答案:

答案 0 :(得分:2)

一些事情:

  • set不是Backbone View的功能。 Check the API
  • 在评论的代码中,调用new OperationErrorView(...)不会自动唤起render函数。您必须手动执行此操作。
  • View的attributes属性没有get方法。再次,Check the API

那么,你应该怎么做?

研究initialize a View with properties的不同方法。然后弄清楚如何在View控制的HTML上获取这些属性。

这里有点让你入门

var OperationErrorView = Backbone.View.extend({
    tagName: 'h3',

    initialize: function(attributes) {
        this.attributes = attributes;
        this.render();
    },

    render: function(){
        // attach attributes to this.$el, or this.el, here

        // insert the element into the DOM
        $('#formAdd_errors').append(this.$el);
    }
});

// later in your code
if ( errors.length > 0 ) {
    errors.forEach(function(error) {
        new OperationErrorView({ error: error });
    });
}

答案 1 :(得分:1)

感谢chazsolo的回答,所有信息都在那里。因此,我会编写一些代码,以防万一有人发现它有用:

var OperationErrorView = Backbone.View.extend({
    initialize: function(attributes){
        this.attributes = attributes;
    },
    render: function(){
        var html = "<h3>" + this.attributes.error +"</h3>";
        $(this.el).html(html);
    }
});

if (errors.length > 0){
    errors.forEach(function(error){
        var errorView = new OperationErrorView({'error':error});
        errorView.render()
        $("#formAdd_errors").append(errorView.$el.html());
    });
}