【发布时间】:2016-12-11 03:57:28
【问题描述】:
我正在尝试在我的backbonejs 视图渲染方法中发出获取请求。在 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))
【问题讨论】:
-
您可能必须将成功调用绑定到父对象。绕过 Backbone 并使用 jQuery 不会保留上下文。我通常将 _.bind 用于此类事情。
-
看起来当我检查放置
debugger的父级时,父级是窗口。 -
@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}",看起来更一致。 -
在 ajax 调用之前我可以做这样的事情来访问用户对象吗?
user = @user那直接不行,不过说不定有类似的功能。
标签: jquery ajax backbone.js coffeescript