2016-08-04 13 views
0

私はbackbonejsビューのレンダリングメソッドでgetリクエストを作成しようとしています。 ajax呼び出しが成功したら、テンプレートをレンダリングしたいと思います。もともとビューに渡されたモデルにアクセスしても問題はあります。私はajaxリクエストからのデータにしかアクセスできません。 ajaxコールの成功のために私の@userモデルを私に利用させるにはどうすればいいですか?私のビュー内でget要求に問題があるバックボーン

FooAdmin.Views.Users ||= {} 

class FooAdmin.Views.Users.ShowView extends Backbone.View  
    initialize: -> 
    @user = @model 

    template: HandlebarsTemplates["users/show"] 

    render: -> 
    @self = @$el.html 
    $.ajax FooAdmin.FOO_API_URL + "/api/v1/orders?user_id=#{@user.attributes.id}", 
     type: 'GET' 
     dataType: 'json' 

     error: (jqXHR, textStatus, errorThrown) -> 
     alert(textStatus) 
     success: (data, textStatus, jqXHR) -> 
     debugger; 
     @self.html(@template(user: @user, order: data)) 
+0

おそらく成功呼び出しを親オブジェクトにバインドする必要があります。バックボーンをバイパスし、jQueryを使用してもコンテキストは保持されません。私は通常このタイプのものに_.bindを使用します。 – stakolee

+0

'debugger'が置かれている親をチェックしているときのように見えます。親はウィンドウです。 – Jay

+0

'@self = @ $ el.html'は意味がありません。' @ self'に関数参照が残っていて、 '@'は必ず' success'折り返し電話。コールバックで 'el = @ $ el'、そして' el.html(...) 'のようなものをもっと必要としませんか?また、 'FooAdmin.FOO_API_URL +"/api/v1/orders?user_id =#{@ user.attributes.id} "'#{FooAdmin.FOO_API_URL}/api/v1/orders?user_id =#{ @ user.attributes.id} "'これは少し一貫しています。 –

答えて

0

それが問題を引き起こしているあなたの成功関数内でご @参照のスコープです。この時点で@はあなたのクラスをあなたが期待するようにもはや参照していません。通常このようなものでは、クラスまたはオブジェクトへの明示的な参照を内部関数に追加します。下ののレンダリングの最初の行を参照して、@と置き換えて変更します。の内側にあります。

FooAdmin.Views.Users ||= {} 

class FooAdmin.Views.Users.ShowView extends Backbone.View  
    initialize: -> 
    @user = @model 

    template: HandlebarsTemplates["users/show"] 

    render: -> 
    thisRef = @ 
    @self = @$el 
    $.ajax FooAdmin.FOO_API_URL + "/api/v1/orders?user_id=#{@user.attributes.id}", 
     type: 'GET' 
     dataType: 'json' 

     error: (jqXHR, textStatus, errorThrown) -> 
     alert(textStatus) 
     success: (data, textStatus, jqXHR) -> 
     debugger; 
     thisRef.self.html(thisRef.template(user: thisRef.user, order: data)) 
+0

'thisRef'は成功の中で利用可能ではないようです。このエラーを取得するには: 'show_view.self-3d520d9 ... .js?body = 1:45未知の型エラー:thisRef.self.htmlは関数ではありません。 ' – Jay

+0

ここで見ている問題はthisRefが利用できないということではないと思います。 thisRef.self.htmlは関数ではありません。上の代入、 '@self = $ el.html'は実際にはhtmlメソッドを@self(this.self)に割り当てているので、** thisRef.self.html **は** $ el.htmlと同等です.html **、これは私が思う問題です。 1つの解決策は、@ @ self => @ el @の代わりに** @ self **の割り当てを変更することです。この例を更新します。 – Wake

関連する問題