在获取之前检查模型属性
check for model attribute before fetch
我在 backbone 路由器的方法中有这行代码。
$.when(system.sideEngine.fetch(), system.lifeSupport.fetch()).done( ...
如果系统有 sideEngineId
和 lifeSupportId
,它工作正常。但是,如果缺少任何一个 ID,我将收到 404 未找到错误,我的页面将无法加载。
我试过包含这样的错误语句:
error: function (model, xhr, options) {
console.log("something went wrong!");
}
但这不是我要找的。我不希望缺少 id 成为阻碍。我仍然希望系统能够加载。
除了创建一个复杂的 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();
}
我在 backbone 路由器的方法中有这行代码。
$.when(system.sideEngine.fetch(), system.lifeSupport.fetch()).done( ...
如果系统有 sideEngineId
和 lifeSupportId
,它工作正常。但是,如果缺少任何一个 ID,我将收到 404 未找到错误,我的页面将无法加载。
我试过包含这样的错误语句:
error: function (model, xhr, options) {
console.log("something went wrong!");
}
但这不是我要找的。我不希望缺少 id 成为阻碍。我仍然希望系统能够加载。
除了创建一个复杂的 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();
}