【问题标题】:Does Backbone have a finally-Callback?Backbone 有 finally-Callback 吗?
【发布时间】:2014-01-16 22:06:13
【问题描述】:

我目前正在创建一个 Backbone.js 和 jquery Mobile Web 应用程序,并且我有一些对 Backbone.model.fetch() 的调用。 我有正确的成功和错误回调,但是无论获取是否成功,我都想执行一些代码。

目前,我只是在复制通用代码。但我问自己是否有任何回调无论发生什么都会执行。

就像 C# 中的 try{} catch{} finally{}。 有这样的吗?

【问题讨论】:

    标签: jquery-mobile web-applications backbone.js try-catch-finally


    【解决方案1】:

    fetch() 返回一个“延迟对象” 见:http://api.jquery.com/category/deferred-object/

    它不像try{} catch{},但是你可以使用.always() 方法绑定一个回调,该回调将在请求完成后执行(无论成功与否)

    像这样。

     var doSomething = function () {
         //will run after fetch() request is finished
     };
    
     collection.fetch().always(doSomething);
    

    类似地,与其将 successerror 回调传递给 fetch() 的选项,通常鼓励将 .done()、.fail() 或 .then() 方法链接到延迟方法(获取、保存...等)

    【讨论】:

    • 那我就那样做吧。谢谢。
    • 我发现使用 done() 事件而不是成功回调不会将对象的 id 传递给函数的参数(Backbone-Id)。但我的函数中需要那个 id。
    • backbone 将相同的参数传递给回调,无论它们是在选项哈希或通过承诺中定义的。您能否发布您的代码以提供更多详细信息?
    • 我有一个this.user.fetch({ success: function(user) { console.log(user.id); } }).done(function(user) { console.log(user.id) }); 第一个显示“hakvdis988”(我做了这个值)。第二个显示“未定义”。我认为这是因为 success-Callback 传递了 Backbone.Model (或相关的东西),而 done()-Callback 传递了一个普通的 javascript-object。
    • 我明白了。在这种情况下,您可能不应该使用传递给您的回调的参数。因为你正在获取this.user,一旦完成,主干将在this.user上分配正确的属性,你应该能够在你的回调中使用console.log(this.user.id),只要上下文this设置正确。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 2015-02-18
    • 2014-11-27
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2011-05-17
    相关资源
    最近更新 更多