Backbone: Дайте model.set возможность синтаксического анализа

Созданный на 21 июн. 2013  ·  13Комментарии  ·  Источник: jashkenas/backbone

Аналог коллекции set позволяет вам предоставить параметр «синтаксический анализ» для запуска функции синтаксического анализатора перед обработкой объекта коллекции. Это удобно, когда у вас есть данные начальной загрузки, из которых вы хотите создать коллекцию, поскольку они не будут проходить через функцию выборки.

Есть ли причина, по которой объект модели не предоставляет такую ​​же возможность для параллельного сбора? Мне кажется непоследовательным, что это опущено.

Изменить: при дальнейшем осмотре сброс по-прежнему учитывает параметр синтаксического анализа.

duplicate

Самый полезный комментарий

На самом деле я использую model.set (model.parse (data)) прямо сейчас, так как опция синтаксического анализа отсутствует. Было бы неплохо иметь это для согласованности с collection.reset и т. Д.

Все 13 Комментарий

Я бы посоветовался с

Реализация должна быть довольно простой. Я думаю, главный вопрос в том, есть ли причина не делать этого? Кроме того, что произойдет, если вместо объекта атрибута будет указан ключ val?

Звучит хорошо, но случай, который вызовет загвоздку в моей голове, - это parse с defaults ( обратите внимание на порядок событий здесь ). Я хотел бы видеть PR с вашими мыслями о реализации.

Отлично, я бы хотел нанести удар.

На самом деле я тоже собирался открыть заявку на это, но потом наткнулся на # 2013 ... хотя я предполагаю, что это было до того, как появилась Collection#set .

Я согласен с @wookiehangover, что было бы неплохо иметь четность API, и я встречал случаи, когда это имеет смысл при использовании синтаксического анализа для обработки вложенных данных (я только что использовал 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 рейтинги