Sencha Touch filter dataview 存储和刷新列表

Posted

技术标签:

【中文标题】Sencha Touch filter dataview 存储和刷新列表【英文标题】:Sencha Touch filter dataview store and refresh list 【发布时间】:2014-02-11 20:04:37 【问题描述】:

看起来很简单,但是在浪费了数小时后,我必须问一下。

我有一个嵌套的数据视图列表,其中包含一个从 api 填充的商店。每条记录都整洁且易于解析。像这样:

 title: 'some title'
 starred: false       // some are "starred: true" and thats what I want
 state: 1
 statetyped: 1

我只需点击一个显示“已加星标”的按钮并过滤列表以仅显示已加星标的项目。

天底下我什么都试过了,包括:

    sto.filterBy(function(record)
        var title = record.get('starred');
        if(title == "true" || title == true)
            return record;
    );

    //doesnt work 

    sto.filter(function (record) 
        if (record.data.starred == true) 
            return record;
        
    );

    //same, doesn't work

我什至绝望并用 underscore.js 过滤了列表,创建了一个新商店并尝试加载新商店,但无济于事。


控制台错误是: 未捕获的类型错误:无法调用 null 的“分离”方法(Default.js?_dc=1392147674804:140)

如果有帮助:

我的数据视图视图:http://jsfiddle.net/8ycnR/ 列表控制器:http://jsfiddle.net/a7ZaX/

【问题讨论】:

【参考方案1】:

如果您在模型中将starred 字段类型配置为bool,您可以简单地使用Ext.data.Store filter() 方法。

作为第一个参数,您应该传递属性名称和作为第二个参数值来过滤:

sto.filter('starred', true);

【讨论】:

我的模型中确实设置了布尔值:jsfiddle.net/9JTFS .. 仍然在 'src/layout/Default.js ' 很难说是什么导致了这个错误,但它不应该是过滤商店直接引起的。这可能是由于您在商店被过滤和数据视图刷新后所做的事情造成的。 OK 您对“刷新”的看法绝对正确。我在数据视图中完全删除了我的“刷新”功能,它按预期工作!现在的问题是我无法让我的顶部停靠数据视图(按钮的水平列表)呈现而不会丢失它到“刷新”问题。关于将另一个数据视图呈现到同一个数据视图的更好方法的任何想法(参见我上面的小提琴) 您不应将dataview 渲染成另一个dataview。您可以使用containervbox 布局将屏幕划分为更多垂直部分,并将两个数据视图添加到其中docs.sencha.com/touch/2.3.1/#!/api/Ext.layout.VBox 有趣 - 我已经尝试过这种方法,但是数据视图项目变得不可点击。我也失去了“scrollDock:true”的神奇(未记录)配置选项,它允许位于数据视图顶部的停靠面板向上滚动。不过谢谢!

以上是关于Sencha Touch filter dataview 存储和刷新列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sencha-touch.jsb3 构建 Sencha Touch?

Sencha Touch实战OA系统开发|Sencha Touch项目教程

Sencha Touch - sencha touch js 大小的性能问题

将 Sencha Architect 项目从 Sencha Touch v2.0.x 更新到 Sencha Touch 2.1.x

iPhone Sencha Touch - 如何在 sencha touch 中将表格视图添加到拆分视图

将 Sencha Touch 1.X 升级到 Sencha Touch 2.X