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
backbone.js获取json成功不会命中_Json_Backbone.js_Fetch - Fatal编程技术网

backbone.js获取json成功不会命中

backbone.js获取json成功不会命中,json,backbone.js,fetch,Json,Backbone.js,Fetch,我使用fetchfrom backbone.js加载json模型,但不会成功 var DialogModel = Backbone.Model.extend({ url : function() { return '/messages/getDialog'; }, parse : function(res) { return res.dialog; } }); var DialogView = Backbone.View.ext

我使用fetchfrom backbone.js加载json模型,但不会成功

var DialogModel = Backbone.Model.extend({
    url : function() {
        return '/messages/getDialog';
    },
    parse : function(res) { 
        return res.dialog;
    }
});

var DialogView = Backbone.View.extend({
    el: $("#page"),
    initialize: function() {
        var onDataHandler = function() {
            this.render();
        };
        this.model = new DialogModel();
        this.model.fetch({ success : onDataHandler});
      },
    render: function(){
        var data = {
                dialogModel : this.model
              };
        var form = new Backbone.Form({
             model: data
        });
        $(this.el).html(form.render().el);
    }
});
现在发生了什么: 调用DialogView初始化。 调用this.model.fetch,但如果成功,则不会命中onDataHandler函数。 /messages/getDialog将返回一个json文件。 json文件正在加载,正如我在网络浏览器中看到的那样

谢谢你的帮助!
Oleg

您遇到的问题是由于一个典型的JS gotcha,而与主干网本身无关。试一试

var that = this;
this.model.fetch({ 
    success : function () {
        that.render();
    }
});
当前传递
onDataHandler
的方式有问题,因为调用函数时会导致
引用全局对象,而不是
对话框视图

这说明了有问题的版本与有效的版本


(您可能还想看看JS,它可以保护您免受此类错误的影响。)

您遇到的问题是由于一个典型的JS问题,与主干网本身无关。试一试

var that = this;
this.model.fetch({ 
    success : function () {
        that.render();
    }
});
当前传递
onDataHandler
的方式有问题,因为调用函数时会导致
引用全局对象,而不是
对话框视图

这说明了有问题的版本与有效的版本


(您可能还想看看JS,它可以保护您免受此类错误的影响。)

更好的方法是监听事件:

this.model.on("sync", this.render).fetch();
我在寻找其他问题时遇到了这个问题,但目前被接受的答案让我发疯。没有充分的理由把
这个
那个
撒在你的代码上。主干(下划线)包括一个可以绑定到的上下文参数


that=this
毫无意义。如果必须实施过时的2007年Crockford模式,那么说
var self=this
。说
that=this
就像说
left=right
。每个人都停下来。

更好的方法是倾听事件:

this.model.on("sync", this.render).fetch();
我在寻找其他问题时遇到了这个问题,但目前被接受的答案让我发疯。没有充分的理由把
这个
那个
撒在你的代码上。主干(下划线)包括一个可以绑定到的上下文参数

that=this
毫无意义。如果必须实施过时的2007年Crockford模式,那么说
var self=this
。说
that=this
就像说
left=right
。大家都停下来