4

Ruby on Rails 3 ニュース アプリがあります。タイトル、いくつかのコンテンツ、および画像の添付ファイル (paperclip gem を使用) を受け取ります。Sencha Architect プロジェクトにJSON フィードを提供するために RABL gem を使用しています。

問題は、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 データを読み取らせるにはどうすればよいですか? あなたが提供できるどんな助けも大歓迎です。

4

2 に答える 2

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 として応答を提供します。

于 2012-11-12T11:57:30.400 に答える
0

これが当てはまるかどうかはわかりませんが、私が煎茶を扱っていたときは、私の店でこれを使わなければなりませんでした

 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'
于 2012-11-09T14:46:21.997 に答える