【问题标题】:backbone fetch on model with sparse array and re-fetch on same model在具有稀疏数组的模型上获取骨干网并在同一模型上重新获取
【发布时间】:2014-02-15 03:34:14
【问题描述】:

集合(列表)视图获取一个稀疏数组(不是所有模型字段)并仅使用名称和 ID 构建模型集合。以

开头
collection.fetch(); //fetch requesting only partial json fields

collection fetch 调用collection.parse 以及collection 中每个模型各自的model.parse()

那里一切都很好。

然后对单个模型视图执行重新获取(在集合中的一个模型上)。这次请求所有字段。名称、标题、描述等。

model.fetch({success: function(view) {console.log("yeah");}); //fetch requesting all json fields

后端休息服务器显示请求和提供的响应。

控制台显示“是”。也就是说,模型获取是通过所有措施实现的。但是,这次model.parse没有被调用。因此新字段不可用。

关于为什么 model.parse 没有被调用,尽管 Ajax “成功”的任何提示

此外,主干done 处理程序在responses.text 中显示正确的json

// Callback for when everything is done
        function done( status, nativeStatusText, responses, headers ) {
            var isSuccess, success, error, response, modified,
                statusText = nativeStatusText;

您是否遇到过类似的问题:使用已建立的模型 id 提取,模型上的提取必须在对象 {} 而不是数组 [{}] 中返回 json。等等..没有最佳实践thnx

【问题讨论】:

    标签: jquery ajax backbone.js


    【解决方案1】:

    Backbone.js 源代码比较容易理解,您可以直接在 Backbone 中调试此类问题。

    当你调用model.fetch 时会发生什么,基本上如下:

    1. 保存您提供的成功回调以供以后使用并替换为新的成功回调。
    2. model.sync 使用当前模型和提供的选项调用(除了选项现在持有不同的成功回调)。
    3. model.sync 最终调用成功回调。
    4. 成功回调调用model.parse(这可能是出现问题的地方)。
    5. model.parse 的结果用于更新模型属性。
    6. 您原来的成功回调被调用。

    通过在您的model.fetch 调用上设置断点并下降到Backbone 源,您应该能够找出问题所在。调试期间需要检查的几件事是:

    • model.parse 是您期望的功能吗?
    • model 是您期望的对象吗?

    如果这没有帮助,请尝试通过删除重现问题的不相关代码来创建一个更小的代码示例。通过这样做,您应该能够找出问题所在。

    如果这仍然不起作用,请使用您的小代码示例创建一个 JSFiddle,使用 http://www.mockable.io/ 创建一个模拟后端并再次将其发布在这里。

    【讨论】:

      猜你喜欢
      • 2012-01-13
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多