Sencha Touch 2 を使用しています。store.filter を使用している間、すべての te レコードがフィルタリングされます。
基本的に私はトピックのリストを持っています。特定のトピックをクリックすると、その特定のトピックのコメントのリストが表示されます。2店舗利用しています。トピックとトピック ID を格納するもの。コメントトピック、コメント、トピックID、およびコメントIDを格納するその他。したがって、特定のトピックを公開するときは、そのトピック ID を使用してコメント ストアをフィルタリングします。
// これがメイン トピック リスト ビューです
Ext.define("ForumApp.view.ForumList", {
extend: "Ext.navigation.View",
requires:["Ext.dataview.List", "Ext.Toolbar", "Ext.field.Text", "Ext.field.TextArea"],
xtype: "forumlistview",
config: {
items: [{
xtype: "toolbar",
title: "Forum",
docked: "top",
items: [
{
xtype: "button",
ui: "back",
action:'backButton',
text: "Logout"
},
{ xtype: 'spacer' },
{
xtype: "button",
text: 'New',
ui: 'action',
itemId: "newButton"
}
]
}, {
xtype: "list",
title:"welcome",
store: "ForumStore",
itemId:"notesList",
loadingText: "Loading Notes...",
emptyText: "<div class=\"notes-list-empty-text\">No notes found.</div>",
onItemDisclosure: true,
grouped: true,
itemTpl: "<div class=\"list-item-title\">{title}</div>"
}],
listeners: [{
delegate: "#newButton",
event: "tap",
fn: "onNewButtonTap"
}, {
delegate: "#notesList",
event: "disclose",
fn: "onNotesListDisclose"
}]
},
onNewButtonTap: function () {
console.log("newTopicCommand");
this.fireEvent("newTopicCommand", this);
},
onNotesListDisclose: function (list, record, target, index, evt, options) {
console.log("topicViewCommand");
this.fireEvent('topicViewCommand', this, record);
}
});
//これは私のコメント リスト ビューです
Ext.define("ForumApp.view.TopicComment", {
extend: "Ext.Container",
requires: "Ext.form.FieldSet",
alias: "widget.topiccommentview",
config: {
scrollable: 'vertical',
fullscreen: true,
layout: "vbox",
tpl: " Topic started by '{username}' :{narrative}",
items: [
{
xtype: "list",
itemId: "commentlist",
itemTpl: "{title} : {username} : {narrative}",
store: "CommentStore",
flex: 1,
},
{
docked: "bottom",
xtype: "button",
action:'comButton',
ui: "confirm",
text: "Comment",
}
]
}
});
//これは私のコントローラです
Ext.define("ForumApp.controller.ForumController", {
extend: "Ext.app.Controller",
config: {
refs: {
forumListView: "forumlistview",
commentList: "#commentlist"
},
control: {
forumListView: {
topicViewCommand: "onTopicViewCommand"
}
}
},
onTopicViewCommand: function (list, record) {
this.getCommentList().getStore().clearFilter();
this.getCommentList().getStore().filter([{property:'id',value: record.data.id}]);
this.getForumListView().push({
xtype: 'topiccommentview',
title: record.titleName(),
data: record.data
});
},
// Base Class functions.
launch: function () {
this.callParent(arguments);
var forumStore = Ext.getStore("ForumStore");
forumStore.load();
var commentStore = Ext.getStore("CommentStore");
commentStore.load();
var userStore = Ext.getStore("UserStore");
userStore.load();
},
init: function () {
this.callParent(arguments);
}
});
//これは私のコメントモデルです
Ext.define("ForumApp.model.CommentModel", {
extend: "Ext.data.Model",
config: {
idProperty: 'commentId',
fields: [
{ name: 'commentId', type: 'int' },
{ name: 'id', type: 'int' },
{ name: 'dateCreated', type: 'date', dateFormat: 'c' },
{ name: 'title', type: 'string' },
{ name: 'username', type: 'string' },
{ name: 'narrative', type: 'string' }
],
validations: [
{ type: 'presence', field: 'id' },
{ type: 'presence', field: 'commentId' },
{ type: 'presence', field: 'dateCreated' },
{ type: 'presence', field: 'title', message: 'Please enter a title for this note.' }
]
},
titleName: function(){
var d=this.data,
names=[
d.title
];
return names;
}
});
//これは私のコメント ストアです
Ext.define("ForumApp.store.CommentStore", {
extend: "Ext.data.Store",
requires: "Ext.data.proxy.LocalStorage",
config: {
model: "ForumApp.model.CommentModel",
proxy: {
type: 'localstorage',
id: 'comment-store-2'
},
sorters: [{ property: 'dateCreated', direction: 'DESC'}],
grouper: {
sortProperty: "dateCreated",
direction: "DESC",
groupFn: function (record) {
if (record && record.data.dateCreated) {
return record.data.dateCreated.toDateString();
} else {
return '';
}
}
}
}
});