Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干:如何将数据传递到渲染视图_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干:如何将数据传递到渲染视图

Javascript 主干:如何将数据传递到渲染视图,javascript,backbone.js,Javascript,Backbone.js,是否有方法将数据传递到渲染 以下代码是我当前使用的代码: render:function() { var background = var highlight = this.model.get('highlight'); $(this.el).find('div').each(function(index,element) { if(index < highlight) { $

是否有方法将数据传递到渲染

以下代码是我当前使用的代码:

    render:function() {
        var background = 
        var highlight = this.model.get('highlight');
        $(this.el).find('div').each(function(index,element) {
            if(index < highlight) {
                $(element).css({'background': 'url("assets/img/alphabet/ok/ok.png"), url('+background+')'});
                $(element).attr('id', 'ok');
            } else {
                $(element).removeAttr('id');
            }
        })
    }
也许像这张照片:


。。。您可以这样做:

this.background : [],
//...
initialize : function(){
//...
    this.background.push(string.charAt(i));
//...
},
render : function(){
    //...
    var background = this.background[index];
    //...
}
但是,初始化中的for循环也可以留在render中,因为它使用.append渲染视图

编辑注: 我重复一遍,在渲染函数的初始化函数中循环移动的可能性

我尝试更改您的主干视图结构:

var WordView = Backbone.View.extend({

    initialize : function(){
        this.listenTo(this.model,"remove",this.remove);
    },

    render : function(){
        var $Div,
            string = this.model.get('string'), //use _string (string can cause some issue in IE)
            highlight = this.model.get("highlight"),

            letter_width = 36,
            letter_heigth = 35,
            word_width = string.length * letter_width;

        if(this.model.get("x") + word_width > $(window).width()) this.model.set({x:$(window).width() - word_width});

        $(this.el).css({
            position:"absolute",
            top : this.model.get("y"),
            left : this.model.get("x")
        });

        var background,char;
        for(var i; i < string.length; i++){
            char = string.charAt(i);
            background = "url('"+char+"') no-repeat";
            $Div.removeAttr("id"); //seems useless

            if(i < highlight){
                background = "url('assets/img/alphabet/ok/ok.png'),url('"+char+"')";
                $Div.id("ok"); //maybe is better $Div.class("ok");
            }

            $Div = $("<div>").clone();
            $Div.css({
                width : letter_width,
                heigth : letter_height,
                float: "left",
                "background" : background
            }).appendTo($(this.el));

        }
    }
});

但它总是使用最后一个字母的例子:apple a p l e但在render always e中如何变为等于初始化?控制台中的一些错误?样式放置正确吗?url“+char+”似乎只放置一个字符,而不是背景url。使用其他样式(如背景色,红色而非背景)查看错误的位置: