gpt4 book ai didi

ruby-on-rails - 需要 Rails 示例的 Sencha Touch RestProxy

转载 作者:行者123 更新时间:2023-12-04 06:34:12 26 4
gpt4 key购买 nike

我有以下模型

Ext.regModel("Entries", {
fields: [
{name: "id", type: "int"},
{name: "title", type: "string"},
{name: "bought", type: "boolean"},
],
proxy: {
type: 'rest',
url: '/lists',
format: 'json',
reader: {
type: 'json'
}
}
});

然后我得到了一个列表,它是从这个模型中填充的

...
store: new Ext.data.Store({
model: "Entries",
autoLoad: true,
remoteFilter: true
}),
...

列表已正确填充。但是当我尝试执行以下操作时

   listeners: {
itemswipe: function (record, index, item, e) {
var el = Ext.get(item);
el.toggleCls("crossedOut");
var store = record.getStore();
var rec = store.getAt(index);
if (el.hasCls('crossedOut')) {
rec.set('bought', true);
rec.save({
success: function() {
console.log("Saved!");
}
});
} else {
console.log('not crossed out');
rec.set('bought', false);
rec.save({
success: function() {
console.log("Saved!");
}
});
}
}
}

触发滑动事件时,出现以下错误

Uncaught TypeError: Cannot read property 'data' of undefined gsencha-touch.js:6
(anonymous function) sencha-touch.js:6
Ext.data.Connection.Ext.extend.onCompletesencha-touch.js:6
Ext.data.Connection.Ext.extend.onStateChangesencha-touch.js:6
(anonymous function)

我明白,我返回的有效载荷有问题,但我找不到正确的例子,我所有的猜测都不成立。

在后端我返回以下内容

format.json {render :json => {:data => @list, :success=> true, :id => @list.id}}

最佳答案

我正在使用 ExtJS 4 预览版,但它应该与 Sencha Touch 一样工作。您的问题可能与返回的 json 的嵌套有关。这是对我有用的。

在 Rails Controller 中:

def index
respond_with @entries = Entry.all do |format|
format.json { render :json => {:success => true, :data => @entries, :total => @entries.count} }
end
end

def show
respond_with @entry = Entry.find(params[:id]) do |format|
format.json { render :json => {:success => true, :data => [@entry]} }
end
end

def create
respond_with @entry = Entry.create(params[:records][0]) do |format|
format.json { render :json => {:success => true, :data => [@entry]} }
end
end

def update
@entry = Entry.find(params[:id])
@entry.update_attributes(params[:records][0])
respond_with @entry do |format|
format.json { render :json => {:success => true, :data => [@entry]} }
end
end

ExtJS 模型:

Ext.regModel("Entries", {
fields: [
{name: "id", type: "int"},
{name: "title", type: "string"},
{name: "bought", type: "boolean"},
],
proxy: {
type: 'rest',
url: '/lists',
format: 'json',
reader: {
type: 'json',
root: 'data',
record: 'entry'
}
}
});

与您所做的两个不同之处:

1/读取器的记录选项告诉 ExtJS 在 json 中查找嵌套记录。它告诉它寻找:

data: [
{
entry: {
id: 1,
title: "Title 1",
bought: true
}
}
]

代替:

data: [
{
id: 1,
title: "Title 1",
bought: true
}
]

在阅读器上设置记录属性的另一种方法是通过将其转储到您的应用程序配置中来禁用 Rails 中的嵌套 json:

config.active_record.include_root_in_json = true

2/返回单条记录时,json输出应该和集合一样,只是你只有一条记录。

Sencha Touch 和 ExtJS 4 文档有时可能有点稀疏,我发现剖析示例是最好的学习方式。

HTH

关于ruby-on-rails - 需要 Rails 示例的 Sencha Touch RestProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com