0

是否可以将问题变量传递到视图渲染中?

我尝试在 fetch 的成功内调用 this.render 但是我得到了一个错误,大概是因为这个。不在正确的范围内。

app.AppView = Backbone.View.extend({
    initialize: function(){


        var inputs = new app.Form();

        inputs.fetch({

            success: function() {

                var questions = inputs.get(0).toJSON().Questions;

                app.validate = new Validate(questions);
                app.validate.questions();



            }, // End Success()

            error: function(err){
                console.log("Couldn't GET the service " + err);
            }

        }); // End Input.fetch()

        this.render();

    }, // End Initialize

    render: function(){
        el: $('#finder')
        var template = _.template( $("#form_template").html(), {} );
        this.$el.html(template);

    } 
4

2 回答 2

1

使用与您的 View 实例不同的this对象调用成功回调。修复它的最简单方法是在调用inputs.fetch之前添加类似这样的内容:

var self = this;

然后在成功回调中:

self.render();
于 2013-07-23T10:39:38.607 回答
1

我不太确定你想要实现什么,但如果你的问题是从成功回调中调用渲染,你有两个选择,Function#bind 或分配一个 self 变量。

有关“self”变量的更多信息,请参见var self = this? . 一个例子:

var self = this;

inputs.fetch({
    success: function () {
        self.render();
    },
    ...
});

您可能应该阅读 JavaScript 范围,例如“Effective Javascript”或在线搜索主题(例如这篇 MDN 文章)以更好地了解那里发生的情况。

对于 Function#bind(),请参阅有关它的 MDN 文章。对于 Backbone,我建议您改用 Underscore/LoDash 的 _.bind,以确保即使在不支持 Function#bind() 的情况下它也能正常工作。

至于更高级的概念,获取操作看起来属于模型或路由器级别,而您应该将问题变量分配为视图的模型。理想情况下,视图不进行数据处理/获取,它们只是被赋予一个模型,该模型具有执行您可能需要的任何数据转换所需的方法。

视图甚至不需要担心模型来自哪里,这通常由路由器处理,以防单页应用程序或页面上的一些初始化代码。

于 2013-07-23T10:52:38.233 回答