0
define([
    'jquery',
    'underscore',
    'backbone',
    'text!modules/index/templates/container.html'
], function($, _, Backbone, container_temp){
    var indexView = Backbone.View.extend({
        el: $('.main_container'),
        initialize:function(){
            _.bindAll(this, 'render');
        },
        render:function(){
            var $this = this;
            var $el = this.el;
            $.get('/js/index/render', {}, function(data){
                var dat = JSON.parse(data);
                $this.pars = dat;
                var tpl = _.template(container_temp, dat);
                $el.html(tpl);
            });
        }
    });
    return new indexView;
});

このコードを実行すると、$elがHTMLで埋められることになっています。しかし、私のブラウザはで混乱し$el.html(tpl);ます。

Uncaught TypeError: Object #<HTMLDivElement> has no method 'html' 

これを修正するには$($el).html(tpl);、jqueryが登録されるようにする必要があります。

これは厄介なようです。私の過去のプロジェクトでは、私は常に以前の方法でそれを行い、それは常に機能してきました。

4

2 に答える 2

3

this.elは生のDOM要素ですが、htmlメソッドはjQueryに属しています。

var $el = this.$el;レンダリングメソッドを試してください:

render:function(){
    var $this = this;
    var $el = this.$el;
    $.get('/js/index/render', {}, function(data){
        var dat = JSON.parse(data);
        $this.pars = dat;
        var tpl = _.template(container_temp, dat);
        $el.html(tpl);
    });
}
于 2013-02-18T13:29:25.793 に答える
2

レンダリング関数を見ると:

render:function(){
        var $this = this;
        var $el = this.el;
        $.get('/js/index/render', {}, function(data){
            var dat = JSON.parse(data);
            $this.pars = dat;
            var tpl = _.template(container_temp, dat);
            $el.html(tpl);
        });
    }

var $el次の$elがthis.elと等しくなるように明示的に割り当てます。これは、通常$elで取得するjQueryラッパーを含まない生のdom要素です。

これを試してください:this.$elなしvar declaration

したがって、$elを$.getスコープに入れると、コードは次のようになります。

render:function(){
    var $this = this;
    var element = this.$el;
    $.get('/js/index/render', {}, function(data){
        var dat = JSON.parse(data);
        $this.pars = dat;
        var tpl = _.template(container_temp, dat);
        element.html(tpl);
    });
}
于 2013-02-18T13:29:31.900 に答える