我正在尝试在我的backbonejs视图渲染方法中发出get请求。关于ajax调用的成功,我想渲染我的模板。我通过访问最初传递给视图的模型我遇到了问题。我只能访问ajax请求中的数据。如何在ajax调用成功的情况下将我的@user模型提供给我?
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 :(得分:0)
在您的成功功能中导致问题的 @ 引用的范围。此时 @ 不再像您期望的那样引用您的课程。通常使用类似的东西,我将在内部函数中添加对类或对象的显式引用。请参阅下面的渲染的第一行,以及在成功中用 thisRef 替换 @ 的更改。
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))