编程是一门艺术

raptor.zh(at)gmail.com Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

archives 存档

01 Jan - 31 Dec 2018
01 Jan - 31 Dec 2017
01 Jan - 31 Dec 2016
01 Jan - 31 Dec 2015
01 Jan - 31 Dec 2014
01 Jan - 31 Dec 2013
01 Jan - 31 Dec 2012
01 Jan - 31 Dec 2011
01 Jan - 31 Dec 2010
01 Jan - 31 Dec 2009
01 Jan - 31 Dec 2008
01 Jan - 31 Dec 2007
01 Jan - 31 Dec 2006
01 Jan - 31 Dec 2005
01 Jan - 31 Dec 2004
01 Jan - 31 Dec 2003
01 Jan - 31 Dec 2002
01 Jan - 31 Dec 2001
01 Jan - 31 Dec 2000
01 Jan - 31 Dec 1999

--

links 链接

--

Backbone笔记之四(修正与补充)

修正

感谢朋友令狐虫的指出,《Backbone笔记之一(View) 》的第一个例子里原来漏掉了 initialize 部分,导致view并不能正常显示(后面的例子里都有),可能是复制代码时搞错了。

因为除了在initialize里调用render方法显示以外,还有一种方法是不需要initialize,而是在new出view对象以后调用render方法。

目前原文已更新修正。

补充

也是令狐虫提出的问题:如何在服务端过滤Collection的结果?

如果只是说按特定的条件在浏览器端过滤Collection是很简单的,Collection本身就有这个功能。

以《Backbone笔记之二(Model/Collection) 》中的例子来说,就是这样:

var tl = new TaskList();
tl.fetch();
//  全部显示是这样:
tl.each(render_item); // render_item 为渲染显示一条记录的函数
//  过滤部分再显示则是这样(因为where的返回值不是collection,而是array,所以要改用underscore的each):
_.each(tl.where({state:"working"}), render_item);
//  除了where方法以外,还可以用underscore的filter方法,详见underscore的文档

但是如果全部记录集很大,而过滤后的结果很小的话,这样做就很浪费。因为这是把全部的结果集都下载到浏览器,再过滤出所需的少量数据,一则浪费服务端资源,二则浪费网络资源,最后还浪费浏览器资源,完全没有必要。

这就是令狐提出的那问题了,如何在服务端过滤?

服务端过滤当然也有办法,其实也不太麻烦,就是修改 TaskList 这个Collection类里的url属性,把它改成一个函数:

// ...
    url: function() {
        return "/task?filter_state=" + this.filter_state;
    },
// ...

这样只要修改filter_state就可以修改过滤条件,具体的过滤实现就需要在服务端根据这个参数作处理了。

推送到[go4pro.org]

Trackback link:

Please enable javascript to generate a trackback url

No trackbacks

评论(0)


 
   
 
  表情图标 

 


提示: 除了 <b> 和 <i> 之外,其他的Html标签都将从您的评论中去除.url或mail地址会被自动加上链接.