0

質問変数をビュー レンダーに渡すことは可能ですか?

フェッチの成功の中で 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

何を達成しようとしているのかよくわかりませんが、問題が成功コールバックから render を呼び出している場合は、Function#bind または自己変数の割り当ての 2 つのオプションがあります。

「self」変数の詳細については、var self = this?を参照してください。. 例:

var self = this;

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

おそらく、「Effective Javascript」などの JavaScript スコープについて読むか、トピック (たとえば、この MDN 記事) をオンラインで検索して、そこで何が起こっているかをよりよく理解する必要があります。

Function#bind() については、それに関する MDN の記事を参照してください。Backbone では、代わりに Underscore/LoDash の _.bind を使用して、Function#bind() がサポートされていない場所でも確実に機能するようにすることをお勧めします。

より高レベルの概念について言えば、フェッチ操作はモデルまたはルーター レベルに属しているように見えます。代わりに、質問変数をビューのモデルとして割り当てる必要があります。理想的には、ビューはデータ処理/フェッチを行わず、必要なデータ変換を実行するために必要なメソッドを持つモデルが与えられるだけです。

ビューは、モデルがどこから来るかについて心配する必要さえありません。これは通常、単一ページのアプリケーションまたはページ上の初期化コードの場合、ルーターによって処理されます。

于 2013-07-23T10:52:38.233 に答える
1

成功のコールバックは、View インスタンスとは異なるthisオブジェクトで呼び出されます。これを修正する最も簡単な方法は、 inputs.fetchを呼び出す前に次のようなものを追加することです。

var self = this;

そして、成功のコールバック内で:

self.render();
于 2013-07-23T10:39:38.607 に答える