Closed jaryway closed 9 years ago
这么做没有问题,或者给你的被确认组件注册自定义事件,然后在确认面板选择“是否”后,trigger那些自定义事件(带着需要的参数,这些参数也是确认面板打开的时候传递进来的)
我提的问题都可以作为spa的api文档了。哈哈
为什么路由不匹配(不存在)也触发loding事件?
这种情况你做一个通用的路由放在最后面,来匹配那些前面没有匹配成功的路由,做一个类似404的页面视图,否则就会报错卡住。
@zhaoda 如何销毁view?比如添加新闻后重置添加页面。
这种情况下,一般是在视图内做重置,而不是主动销毁视图重新生成,spa内部已经内置了cache机制,不活跃的视图会被自动销毁。
https://github.com/zhaoda/spa/blob/master/src/spa.js#L1799
https://github.com/zhaoda/spa/blob/master/src/spa.js#L1364 设置nocache
恩,调用from rest() 就可以。如何刷新视图呢?比如新闻添加后刷新新闻列表
这种情况一般都是视图内的局部刷新,就是通常的业务逻辑,因为你能拿到视图的dom,所以视图里面做什么就是你的业务逻辑了,一般在视图的view、init、beforeopen、afteropen、beforeclose、afterclose回调里实现,和spa就没有太多的耦合了。
现在是要从添加视图,刷新列表视图。
你说的都是具体的业务逻辑了,也就是说spa的视图内的组件,这些代码和逻辑和spa本身关系不大,只要在spa的视图定义时,在view、init(一般在init中)中初始化你的组件就好了,我们一般是通过事件代理的方式把组件的接口注册到doc的自定义事件中。
就是说我有一个editview,一个listview,在listview中点击新建按钮,展示editview,添加数据后刷新listview。能不能在listview上添加一个update事件,让editview触发list的update事件?
可能是我说的不清楚,你的listview里面有一个列表的组件,你的editview里面有一个编辑组件,他们的功能都是组件本身的,只是他们的视图(html)是插入到spa视图里面的,他们之间的交互其实应该和spa解耦,没必要往spa上面注册事件,就和你正常做pc端的网页一样,这么说是否能更清楚?
正如你所说,只是之前不知道怎么注册事件,原来这样注册事件。
$view.on('update', function (event, model) {
var currentdiv = $view.find("div[data-news-id='" + model.id + "']");
require(["newslistitem"], function (template) {
var html = template(model);
if (currentdiv && currentdiv.length > 0) {
currentdiv.replaceWith(html);
} else {
$(".newslist-container", $view).append(html);
}
});
})
spa能与backbone共用吗?感觉backbone的mvc用起来体验更好,只是少了动画。
@zhaoda spa:navigate 事件 不能把方法以pushdata传递到下个页面中吗? 一直报 DataCloneError: The object could not be cloned. 方法只能在pannel间传递吗?
spa:navigate
事件的pushdata
参数会通过浏览器原生的history.pushState(state, title, url)
进行原生的传递和保存,state对象必须是可以序列化的,而且还有大小限制。
又涨知识了
我现在是通过 pushData,将方法传递到 ”确认面板“,再在”确认面板“中驱动事件。这种符合解耦标准。