访问视图中的元素 - Backbone.JS

时间:2014-04-04 17:03:58

标签: javascript jquery backbone.js


编辑:已解决

代码中有两个拼写错误,一个是陈述的,另一个是偷偷摸摸的, 非常感谢,抱歉你的时间!

你好,

我在探索Backbone.js时遇到了当前的问题

我使用骨干创建了一个简单的HTML表,每一行都是一个模型,所有行的集合都传递给一个呈现所有内容的视图 - 到目前为止,非常好。

我的表有以下类:每个tablecell都有一个.tablecell类,每行都有一个.tablerow类。

我目前有一个点击事件,每次点击表格单元格时都会正确触发。 我想知道的是,如果可能的话,我可以如何访问'点击'表格单元格并改变他的属性。 举个简单的例子,更改单击的单元格的类或更改背景颜色。

甚至可以做到吗?或者我完全错过了什么?

我目前的想法是,每个细胞必须是他自己的模型和他自己的观点和他自己的事件,但我怀疑它应该是如此复杂。 提前谢谢!

我的观点是:

            var rowView = Backbone.View.extend({

                //usual view attributes : el, model, initialize etc.

                events : 
                    {
                    "click.tablecell" : "clickOnCell",
                    },

                    clickOnCell : function(cell)
                    {
                        cell = $(cell.currentTarget);
                        cell.css("font-weight","bold");
                    },
                render : function () {

        // boring render method, renders correctly.

                },  
            });

1 个答案:

答案 0 :(得分:0)

您必须将事件和处理程序添加到events哈希(您的示例中缺少空格):

events: { 'click .tablecell': 'clickOnCell' }

您收到jQuery(或您正在用其替换jQuery的另一个框架)事件对象:

clickOnCell: function (e) {

    var $td = $(e.currentTarget);

    $td.css('color', 'red');

}

了解事件委派发生在视图 instantiation 的末尾。这样,我的意思是您的视图必须具有el属性作为您的行。

如果您无法在视图定义期间设置el属性(似乎是这种情况),请尝试在setElement期间使用render到您的表格行元素。

render: function () { 

   //...

   var myRow = $('<tr/>');

   this.setElement(myRow);        

   //...

}

希望我帮助过。