事件SelectField Sencha Touch 2.1和使用存储和模型。 (在Sencha Architect 2中)

时间:2013-06-10 06:31:40

标签: sencha-touch sencha-architect sencha-touch-2.1

我开始了解Sencha Touch 2.所以,我有很多问题要问! ^^让我们研究一下。 现在我有一个像json的数据:

{      结果:“成功”,      国民: [         “阿富汗”,         “阿尔巴尼亚”,         “阿尔巴尼亚”,         “阿尔及利亚”,         “美属萨摩亚”,         “安道尔”      ]   }

然后,我将从url:nation.php文件加载它。 如何将其加载到我的选择字段。??????

分享和支持我。谢谢:)。

2 个答案:

答案 0 :(得分:2)

我不知道如何在Sencha Architect 2中做到这一点(我没有使用它)..但仍然

而不是在没有尝试的情况下提出问题(我的意思是你没有在这里发布尝试过的代码),最好先从Sencha Touch文档开始。

无论如何,您可以按照以下方式进行操作

<强>模型

Ext.define('AppName.model.countries', {
    extend : 'Ext.data.Model',

    config: {
        fields: [
               {name: 'name', convert: function(value, record) {
                                return record.raw;
               }}
            ],
    }
});

商品

var myStore = Ext.create("Ext.data.ArrayStore", {
  model : 'AppName.model.countries',
  proxy: {
    type: "ajax",
    url : "nation.php",
    reader: {
        type: 'json',
        rootProperty : function(data) {
            return data.national;
        }
    }        
    },
    autoLoad: true
 });

在视图中选择字段

 Ext.create('Ext.form.Panel', {
    fullscreen: true,
    items: [{
       xtype: 'selectfield',
       store: myStore ,
       valueField:'name',
       displayField:'name'
    }]
});

答案 1 :(得分:1)

借助Viswa的支持。 :)我发现这个问题 - XMLHttpRequest无法加载。 Access-Control-Allow-Origin错误(浏览器策略安全性)不允许使用Origin。 Sencha Touch文档说:“当您需要从运行应用程序的域以外的域加载数据时,JsonP代理非常有用。如果您的应用程序在http://domainA.com上运行,则无法使用Ajax加载其数据来自http://domainB.com,因为浏览器禁止跨域ajax请求。

“此外,我们需要做的就是 - ”在您的Web服务器中实现所有api“并遵循JsonP的格式代码:(在PHP中)

$callback = $_REQUEST['callback'];// check callbackkey

// Create the output object.
$output = array('a' => 'Apple', 'b' => 'Banana');// output data.

//start output
if ($callback) {
    header('Content-Type: text/javascript');
    echo $callback . '(' . json_encode($output) . ');';
} else {
    header('Content-Type: application/x-json');
    echo json_encode($output);
}

如果。使用Sencha Touch 2.1,您可以使用:

Ext.data.JsonP.request({
        url: 'http://otherdomain/svn_visaapi/trunk/api/visa_api.php/test_json',
        callbackKey: 'callback',
        success: function(result) {
            console.log(result);
            //Your success function here...
        }
    });

- 如果使用Sencha Architect,您可以使用Store.proxy.JsonP来调用api。 - 阅读更多文档Sencha Touch 2.1来查看。