RubyLouvre / mmRouter

avalon的三柱臣之一( 路由,动画,AJAX)
119 stars 78 forks source link

原mmRouter是不能传递对象的,以下是我暂时的解决方式 #93

Closed amin168 closed 8 years ago

amin168 commented 9 years ago

当我们执行一条如下这样的路由时,想给orderPreview这个页面传递一个carts对象时,是传递不了的。

avalon.router.go("orderPreview", { restId: restId, branchId: branchId, carts: carts }, { replace: true, confirmed: true });

我们可以修改mmState.js的第749行,原代码是

syncParams: function(toParams) {
    var me = this
    avalon.each(this.keys, function(index, item) {
        var key = item.name
        if(key in toParams) me.params[key] = toParams[key]
    })
},

修改后

syncParams: function(toParams) {
    var me = this

    if (me.keys.length == 0) {
        //TODO:路由传递对象,暂时的解决方法,2015年7月1日09:25:30 by amin
        me.params = toParams;
        //me.oldParams = toParams;
        return;
    }

    avalon.each(toParams, function (key, item) {
        if (item instanceof Object) {
            me.params[key] = item;
        }
    });

    avalon.each(this.keys, function(index, item) {
        var key = item.name
        if(key in toParams) me.params[key] = toParams[key]
    })
}

不知道这种方式好不好使,不过暂时解决了我需要传递对象的问题。

amin168 commented 9 years ago

还有一个问题,就是这种传递对象的方式,刷新页面后,对象会丢失,主要是因为url中keys的问题

RubyLouvre commented 9 years ago

本来SPA应用就不能刷新页面

amin168 commented 9 years ago

也是啊= =