gpt4 book ai didi

Backbone.js 模型默认值和解析

转载 作者:行者123 更新时间:2023-12-04 22:47:38 29 4
gpt4 key购买 nike

我有这个 Backbone.Model表示 Google Books API 卷:

    var Book = Backbone.Model.extend({

defaults: {
volumeInfo : {
title: 'n.a.',
authors: 'n.a.',
publisher: 'n.a.',
publishedDate: 'n.a.',
imageLinks : {
smallThumbnail: '/unavailable.jpg'
}
}
},

parse: function(resp) {
if (resp.volumeInfo.authors) {
resp.volumeInfo.authors = resp.volumeInfo.authors.join(',');
}
return resp;
}
});

哪个被馈送到这个模板:
<script type="text/template" id="bookCollectionRow">
<tr>
<td><img class="thumbnail" src="<%= volumeInfo.imageLinks.smallThumbnail %>" /></td>
<td><a target="_blank" href="<%= volumeInfo.canonicalVolumeLink %>"><%= volumeInfo.title %></a></td>
<td><%= volumeInfo.authors %></td>
<td><%= volumeInfo.publisher %></td>
<td><%= volumeInfo.publishedDate %></td>
</tr>
</script>

解析模板时,当卷 JSON 不包含 imageLinks 时我收到此错误:
Uncaught TypeError: Cannot read property 'smallThumbnail' of undefined.

我知道我可以通过查看 if 来修复它在 Model或在 template但是 defaults的目的是什么?模型属性呢?仅当不覆盖 parse 时才有效吗? ?

最佳答案

一些东西。首先,您通常不应该将嵌套对象作为主干模型属性 - 如果您始终可以原子地处理属性就可以了,但这是一个完美的例子,说明何时不能。从数据模型的角度来看,imageLinks 应该是它自己的主干模型类,volumeInfo 也是如此。

其次,如果 defaults 是对象字面量( {} )而不是函数,则相同的对象将用作每个模型实例的默认属性。我想你想要这个:

defaults: function(){
return {
volumeInfo : {} // should be new VolumeInfo({}) imo
};
},

但是数据模型是更大的问题 - .defaults 并没有做你似乎想要的那种嵌套对象模板,并且有充分的理由:它不能很好地工作,这只是第一个如果您不保持实例数据非常平坦,您将遇到许多问题。

关于Backbone.js 模型默认值和解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com