yandex-ui / noscript

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

ns.Model.paramsRewrite ломает последовательность параметров в ключе #643

Open chestozo opened 7 years ago

chestozo commented 7 years ago

Пример:

ns.Model.define('ppp', {
    params: {
        'p1': null,
        'p2': null,
        'p3': null
    },

    paramsRewrite: function(params) {
        if (true) {
            params.p2 = 'yes'
        }
        return params;
    }
});

console.log(
    ns.Model.get('ppp', { p1: 1, p3: 3 }).key,
    ns.Model.get('ppp', { p1: 1, p2: 'yes', p3: 3 }).key
);

Выводится:

model=ppp&p1=1&p3=3&p2=yes // !
model=ppp&p1=1&p2=yes&p3=3

Ожидаю:

model=ppp&p1=1&p2=yes&p3=3
model=ppp&p1=1&p2=yes&p3=3
chestozo commented 7 years ago

/cc @vitkarpov

vitkarpov commented 7 years ago

А почему ты ожидаешь порядок? Ты где-то в тестах смотришь на ключ? Кажется, это плохой вариант, лучше через АПИ ключ получать

chestozo commented 7 years ago

ммм какое api?

vitkarpov commented 7 years ago

getKeyAndParams

chestozo commented 7 years ago

так это оно же, просто оно внутри вызывается

chestozo commented 7 years ago

https://github.com/yandex-ui/noscript/blob/master/src/ns.model.js#L69

vitkarpov commented 7 years ago

Я имею ввиду, что в ключе вообще может быть любая упячка — главное взять хеш параметров и закодировать в ключе и наоборот: взять ключ и раскодировать в параметры

vitkarpov commented 7 years ago

Т.е. нельзя завязываться на определенный вид ключа

vitkarpov commented 7 years ago

Разве нет?

chestozo commented 7 years ago

в примере в ключе - одни и те же параметры, но ключ - разный кажется, так быть не должно

chestozo commented 7 years ago

я просто хочу, чтобы ns.Model.get({ p1: 1, p2: 2 }) выдавал всегда тоже самое, что и ns.Model.get({ p2: 2, p1: 1 }). А тут это немного ломается, кажется, не?

vitkarpov commented 7 years ago

Ну да, я теперь понял о чем ты. Вопрос в том, создаются ли реально разные экземпляры моделей или нет? Я клоню к тому, что может если внутри мы пользуемся этим же АПИ и это не влияет на функциональность, то может и не надо (но сбивает с толку, это да)

chestozo commented 7 years ago

Да, разный ключ - разные экземпляры (

chestozo commented 7 years ago

Во, Саша нарыл #337

chestozo commented 7 years ago

Похоже, сортировка нужна только, если есть paramsRewrite ) https://github.com/yandex-ui/noscript/blob/master/src/ns.model.js#L839-L842 В остальных местах - ключ строится по pNames - т.е. по одной и той же последовательности.