yandex-ui / noscript

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

Хотим exception, когда нет параметров нужных для ключа модели #491

Open chestozo opened 9 years ago

chestozo commented 9 years ago
ns.Model.define('ququ', {
    params: {
        'id': null
    }
});

// Тут всё ок.
ns.Model.get('ququ', { id: 1 });
// { key: "model=ququ&id=1" ... }

// А вот тут хочется exception (потому что не хватает параметра id для ключа):
ns.Model.get('ququ', {});
// { key: "model=ququ" ... }

Получается, параметров для ключа не хватает, но ключ строится и вообще всё хорошо. Мне кажется, где-то это обсуждалось уже, но я не помню где и какой итог.

Всем кажется, что это ок? /cc @i2r

doochik commented 9 years ago

Да, обсуждалось. Честно пытался найти таск и не нашел Тогда я был против, потому что у меня есть модели с кучей необязательных параметров. Надо придумать синтаксис для обязательности. Я готов это сделать, мне бы тоже пригодилось :)

doochik commented 9 years ago

Нашел! #452

doochik commented 9 years ago

Предлагаю =. Его хорошо видно, он отличается от других и символизирует "присвоение", т.е. наличие значение

ns.Model.define('ququ', {
    params: {
        'id=': null
    }
});

Если я правильно помню, параметры у нас разбираются в объект, поэтому там можно сделать флаг

chestozo commented 9 years ago

= означает только "опциональные параметры" в роутере https://yandex-ui.github.io/noscript/single-page/#index_md_14

chestozo commented 9 years ago

Мои варианты:

params: {
    '!id': null, // аналогия из https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=ru
    'id': ns.paramType.required // аналогия из http://facebook.github.io/react/docs/reusable-components.html#prop-validation
}
chestozo commented 9 years ago

А ещё вариант по дефолту делать параметры обязательными, а для опциональных придумать обозначение.

doochik commented 9 years ago

Мне ! принципиально не нравится, потому что его плохо видно, он может слится с l или i

alexeyten commented 9 years ago

А почему бы необязательным параметрам не задать дефолтное значение ''? А все остальные параметры сделать обязательными?

chestozo commented 9 years ago

А почему бы необязательным параметрам не задать дефолтное значение ''? А все остальные параметры сделать обязательными?

Раньше было что-то такое для обозначения обязательности:

params: {
    p1: true, // обязательный
    p2: false // необязательный
}

оно чего-то не прижилось. Плюс начнётся всякое '' == 0 и т.п.

А чем не нравится, к примеру, 'id': ns.paramType.required? Можно будет накрутить валидаторы параметров потом, к примеру.

doochik commented 9 years ago

Мне нравится идея @alexeyten. Просто и понятно.

chestozo commented 9 years ago

Т.е. поумолчанию параметры обязательны, а для опциональных указываем p: ''? Мне тоже ок. @edoroshenko ?

alexeyten commented 9 years ago

Не обязательно ''. Любое разумное значение. Может 0, может 'default' и т.п.

chestozo commented 9 years ago

Ну оно и сейчас так работает, да. Просто сейчас остальные параметры опциональные, а хочется обязательные.

edoroshenko commented 9 years ago

+1 к @alexeyten

doochik commented 9 years ago

Итого: Если параметр в декларации null - обязательное поле Любое другое значение - необязательное

Все правильно?

edoroshenko commented 9 years ago

да

chestozo commented 9 years ago

Итого: Если параметр в декларации null - обязательное поле Любое другое значение - необязательное Все правильно?

Т.е. прямо value === null будем проверять?

doochik commented 9 years ago

Да