Backbone: 给 model.set 一个解析选项

创建于 2013-06-21  ·  13评论  ·  资料来源: jashkenas/backbone

set 的集合对应物允许您提供“解析”选项以在处理集合对象之前运行解析器函数。 当您有要从中构建集合的引导数据时,这很方便,因为它不会通过 fetch 函数。

模型对象没有为并行收集提供相同的选项是否有原因? 它被省略对我来说似乎不一致。

编辑:经过进一步检查,重置仍然尊重解析选项。

duplicate

最有用的评论

由于缺少解析选项,我现在实际上正在使用 model.set(model.parse(data)) 。 为了与 collection.reset 等保持一致,这将非常好。

所有13条评论

我会推迟@caseywebdev关于此操作的能力,但我认为在模型和集合解析之间进行 API 奇偶校验当然是合理的。 感谢您打开问题@etler!

实施应该非常简单。 我认为主要的问题是是否有任何理由不这样做? 另外,当提供键 val 而不是属性对象时会发生什么?

这听起来不错,但会导致我头顶障碍的情况是parsedefaults注意这里的事件顺序)。 我很想看到一个包含你的实现想法的 PR。

太好了,我很想试一试。

我实际上也打算为此开一张票 - 但后来遇到了 #2013 ......尽管我认为那是在有Collection#set

我同意@wookiehangover 的观点,即 API 奇偶校验会很好,而且我遇到过使用 parse 处理嵌套数据时有意义的情况(我刚刚使用了model.set(model.parse(data))如其他票)。

@tgriesser我不知道我是怎么错过这个问题的! 我同意该用例的讨论,但我认为更引人注目的用例是解析引导数据(以及嵌套解析,我也在做)。 我也一直在使用相同的解决方法,但正如你所说,现在有一个Collection#set ,现在也有一个奇偶校验参数。

需要这个的实际用例是什么?

如果您想在现有模型上调用set ,其中对象具有嵌套数据,您将在parse提取模型。 我曾多次想要这个功能。

class Book extends Models.Document
   constructor: ->
      <strong i="8">@info</strong> = new InfoModel()
      <strong i="9">@chapters</strong> = new ChaptersCollection()
      super

   parse: (attrs, options) ->
      @info.set(attrs.info, options)
      @chapters.set(attrs.chapters, options)
      _.omit(attrs, 'info', 'chapters')

现在你可以这样做:

book.set({
  title: 'title',
  info: {
    some: data
    someNested: {
        otherData: ...
    }
  },
  chapters: [{...}, {...}]
}, {parse: true});

它应该可以工作...(是的, model.set(model.parse(可以工作,但是使用相同的 api 来解析集合和模型中的嵌套数据会更简单)...尽管存在 #2623 的问题,但它目前只能工作向下。

任何人都想过此更改将如何与默认值一起使用? 并且没有双重解析?

为了让它与默认值一起工作,我创建了一个options.defaults ,在初始化函数中分配以传递给set ,因此它们可以在解析步骤之后应用。 我不知道这是否是我们想要的设计决策,但我想不出替代解决方案。

让我们把这个对话转移到公开的公关上……

有任何更新吗?

由于缺少解析选项,我现在实际上正在使用 model.set(model.parse(data)) 。 为了与 collection.reset 等保持一致,这将非常好。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jashkenas picture jashkenas  ·  7评论

g00fy- picture g00fy-  ·  9评论

jonathan picture jonathan  ·  11评论

zowers picture zowers  ·  11评论

rubiii picture rubiii  ·  12评论