javascript - 在获取之前检查模型属性

标签 javascript jquery backbone.js backbone-model

我在 Backbone 路由器的方法中有这行代码。

$.when(system.sideEngine.fetch(), system.lifeSupport.fetch()).done( ...

如果系统有 sideEngineIdlifeSupportId,它就可以正常工作。但是,如果其中一个 id 丢失,我会收到 404 未找到错误,并且我的页面将无法加载。

我尝试包含这样的错误语句:

error: function (model, xhr, options) {
    console.log("something went wrong!");
}

但这不是我要找的。我不希望 ids 的缺失成为一个阻碍。不管怎样,我仍然希望系统能够加载。

除了创建复杂的 if/then 树之外,有没有办法在执行提取之前有条件地检查 id?

最佳答案

isNew function在这种情况下应该有所帮助。

If the model does not yet have an id, it is considered to be new.

var MyModel = Backbone.Model.extend({
  idAttribute: 'whatever',

  fetch: function() {
    $('#result').append('fetch fired!<br/>');
    return null;
  }
});

var noId = new MyModel(),
  hasId = new MyModel({
    whatever: 5
  });

$.when(
  noId.isNew() ? null : noId.fetch(),
  hasId.isNew() ? null : hasId.fetch()
).done(function() {
  $('#result').append('done fired!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<div id="result" />

$.when(
    system.sideEngine.isNew() ? null : system.sideEngine.fetch(), 
    system.lifeSupport.isNew() ? null : system.lifeSupport.fetch()
).done(function() {
    ...
});

请注意,在这种情况下,null 的作用就像一个 noop。

如果您打算定期使用它,可能值得考虑:

Backbone.Model.prototype.fetchIfId = function() {
    return this.isNew() ? null : this.fetch();
}

关于javascript - 在获取之前检查模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898492/

相关文章:

javascript - 使用 Backbone 进行方面编程

javascript - Backbone 获取URL参数

javascript - CSS:在 Firefox 的放大打印预览中,事情变得四处移动

javascript - 以下函数中加号 (+) 的作用是什么,该函数摘自 jquery 源代码

javascript - 在拖放时获取 jstree 的元素 ID

javascript - 名称 id 或类中的正则表达式?

javascript - 无法通过 Angularjs 加载谷歌地图 URL

javascript - msSaveOrOpenBlob 在 Edge 中工作但在 Edge WebView 中不起作用

javascript - Jquery .css 不工作

javascript - 如何从 fetch 返回 ajax 结果