yandex-ui / noscript

Noscript: JavaScript MVC Framework for building SPA
http://yandex-ui.github.io/noscript/
MIT License
34 stars 22 forks source link

АПИ для доопределения параметров апдейта в patchLayout #619

Open vitkarpov opened 8 years ago

vitkarpov commented 8 years ago

Есть вьюшка, которая патчит свой лейаут:

ns.View.define('v-1', {
  models: ['m-1']
  methods: {
    patchLayout() {
      if (this.getModel('m-1').isInGoodMood()) {
        return 'layout-for-v-1-1';
      }
      return 'layout-for-v-1-2';
    }
  }
});

Хочется на основании данных модели доопределить параметры апдейта, который запустится для отрисовки этой части дерева.

Сейчас сделал просто, но это работает:

// HACK: т.к. объект передается по ссылке, то его можно модифицировать
patchLayout(updateParams) {
  updateParams.p1 = this.getModel('m-1').getMeP1();

  // ...
}

Хочется сделать более очевидную штуку (и не разломать это в будущем, зафиксировав АПИ).

Лайт-вариант (почти то же самое, но чуть более явно), без потери обратной совместимости:

patchLayout(updateParams, extendedParams) {
  extendedParams.p1 = this.getModel('m-1').getMeP1();

  // ...
}
vitkarpov commented 8 years ago

@chestozo @Katochimoto что думаете насчет того, чтобы добавить в patchLayout «законную» возможность доопределения параметров апдейта для определенной части дерева?

chestozo commented 8 years ago

Ох, ещё одно место модификации параметров. Может просто руками update запускать и туда подсоввывать параметры уже? Я бы не стал это в API выносить если честно, но, может, я зануда )

vitkarpov commented 8 years ago

Может просто руками update запускать и туда подсоввывать параметры уже?

Ну, как бы patchLayout и нужен для того, чтобы запустился еще один апдейт, автоматом, после запроса моделей.

vitkarpov commented 8 years ago

@chestozo @alexeyten слушайте, я тут подумал, а может сделать это еще более явно — добавить метод patchParams? Он явно доступен для реализации, и будет вызываться до patchLayout, соответственно, в него попадут уже измененные параметры.