【问题标题】:How can I get sencha architect to read json from rails如何让 sencha 架构师从 rails 读取 json
【发布时间】:2012-10-29 20:37:32
【问题描述】:

我有一个 Ruby on Rails 3 新闻应用程序。它需要一个标题、一些内容和一个图像附件(使用回形针 gem)。我正在使用 RABL gem 为 Sencha Architect 项目提供 JSON feed

问题是 Sencha Architect 无法读取 JSON url。当我尝试将数据加载到商店时,我收到一条非常无用的消息,说“无法使用提供的配置加载数据”和一个在浏览器中打开 url 的链接(打开得很好)。 Sencha Architect 在某处是否有提供有关此错误的更多信息的日志?

这里是 RABL 文件:

# show.rabl
object @article
attributes :title, :body
node(:mobile_url) { |article| article.image.url(:mobile, false) }
node(:tablet_url) { |article| article.image.url(:tablet, false) }
node(:original_url) { |article| article.image.url(:original, false) }

# index.rabl
collection @articles
extends "articles/show"

RABL 默认不提供内容类型,所以我在文章控制器中有这个:

before_filter :default_format_json

def default_format_json
  if(request.headers["HTTP_ACCEPT"].nil? && params[:format].nil?)
    request.format = "json"
  end
end

这是 Architect 生成的代码,用于显示我使用的配置选项:

# Stories store
Ext.define('MyApp.store.Stories', {
    extend: 'Ext.data.Store',

    requires: [
        'MyApp.model.Story'
    ],

    config: {
        autoLoad: true,
        model: 'MyApp.model.Story',
        storeId: 'Stories',
        proxy: {
            type: 'jsonp',
            url: 'https://feedr.org.uk/articles.json',
            reader: {
                type: 'json',
                rootProperty: 'article'
            }
        }
    }
});

# Story model
Ext.define('MyApp.model.Story', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {
                name: 'title'
            },
            {
                name: 'body'
            },
            {
                name: 'mobile_url'
            },
            {
                name: 'tablet_url'
            }
        ]
    }
});

如何让 Sencha Architect 读取我的 JSON 数据?非常感谢您提供的任何帮助。

【问题讨论】:

    标签: ruby-on-rails-3 sencha-architect rabl


    【解决方案1】:

    好的,事实证明 Sencha 配置没有问题,问题出在我的 rails 应用程序上。我正在使用 RABL gem 来生成 Json 响应。 RABL 需要配置为以初始化程序的形式生成 JsonP 响应,如下所示:

    # config/initializers/rabl_init.rb
    Rabl.configure do |config|
      config.include_json_root = false
      config.include_xml_root  = false
      config.enable_json_callbacks = true
    end
    

    重要的选项是enable_json_callbacks = true。它会导致 RABL 将响应作为我的 Sencha 应用可以理解的 JsonP 提供。

    【讨论】:

    • 用 jquery 调用相同的 url 怎么样?我被困在同样的问题上。有一个响应,但它仍然无法解析。 Rails 似乎没有提供 javascript 可解析的 json 响应;至少不是默认的
    • 我是Sencha Touch的初学者,请详细说明,因为我也有同样的问题但我无法理解,什么是RABL?
    • 浏览器不允许跨域ajax。为了解决跨域问题,我们需要从服务器获取 JSONP 格式而不是 JSON 格式。
    【解决方案2】:

    不确定这是否适用,但是当我使用煎茶时,我不得不在我的商店中使用它

     config: {
        autoLoad: true,
        model: 'UniversityData.model.Person',
        proxy:{
            type:'ajax',
            url: 'persons.json'
            },
        sorters: ['lastName', 'firstName'],
        grouper: {
            groupFn: function(record){
                return record.get('lastName')[0];
            }
        }
    }
    

    似乎唯一的区别是

          type: 'jsonp'  to my type: 'ajax'
    

    【讨论】:

    • 虽然这可以在 Architect 中加载数据,但当我在浏览器中预览它时,我得到一个跨站点脚本错误。出于这个原因,我仅限于使用 JsonP。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多