Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 通过json和转换将数据加载到ember data 1.0版中的存储中_Ember.js_Ember Data - Fatal编程技术网

Ember.js 通过json和转换将数据加载到ember data 1.0版中的存储中

Ember.js 通过json和转换将数据加载到ember data 1.0版中的存储中,ember.js,ember-data,Ember.js,Ember Data,我想知道将数据加载到存储中的正确方法是什么。我将路由器定义为: this.resource('analyticsTemplates', { path: 'templates' }); this.resource('analyticsTemplate', { path: 'templates/:analytics_template_id' }); 对于我的“analyticsTemplates”路线,我定义了一个把手模板,列出表中的所有模板,以及一个add按钮,该按钮打开一个模式框,其中包含一个

我想知道将数据加载到存储中的正确方法是什么。我将路由器定义为:

this.resource('analyticsTemplates', { path: 'templates' });
this.resource('analyticsTemplate', { path: 'templates/:analytics_template_id' });
对于我的“analyticsTemplates”路线,我定义了一个把手模板,列出表中的所有模板,以及一个add按钮,该按钮打开一个模式框,其中包含一个表单,提交时应向存储添加新记录并更新我的表。现在我的表单使用文件输入字段,所以我没有使用

this.get('model').save()
它正确地同步了商店。相反,当表单提交时,它将表单发布到一个隐藏的iframe,然后该iframe的主体内容由表示当前添加的记录的json数据填充。返回数据如下所示:

{
    "analyticsTemplate": {
        "id": 6,
        "name": "deee",
        "description": "asdasdasd",
        "csFileName": "commandScript.txt",
        "csLastUpdatedBy": "Deewendra Shrestha",
        "csLastUpdated": "2013-10-22T18:00:54Z",
        "dateCreated": "2013-10-22T18:00:54Z",
        "lastUpdated": "2013-10-22T18:00:54Z",
        "createdBy": "Deewendra Shrestha",
        "lastUpdatedBy": "Deewendra Shrestha",
        "parameters": {
            "homeDir": {
                "category": "global",
                "description": "Where is the analytics folder",
                "name": "homeDir",
                "value": "Q:/Reckitt Benckiser/2013/RB_Steroid/Analytics/IntergerateTest_DONOTUSE"
            },
            "historyDir": {
                "category": "global",
                "description": "Where R image will be saved",
                "name": "historyDir",
                "value": "Rhistory"
            },
            "Sourcefolder": {
                "category": "type 1",
                "description": "Where are source codes and functions are saved",
                "name": "Sourcefolder",
                "value": "J:/_MRO/Analytics/Analytics_R_Source_Scripts"
            },
            "resultsDir": {
                "category": "global",
                "description": "Where are results stored",
                "name": "resultsDir",
                "value": "results"
            },
            "dataDir": {
                "category": "opt",
                "description": "Where is raw csv stored",
                "name": "dataDir",
                "value": "Export"
            },
            "testParam": {
                "category": "global",
                "description": "some long sentence repeated multiple times. some long sentence repeated multiple times. some long sentence repeated multiple times.",
                "name": "testParam",
                "value": "some long sentence repeated multiple times. some long sentence repeated multiple times.some long sentence repeated multiple times."
            }
        }
    }
}
我在控制器中尝试了两种方法:

this.get('store').push('analyticsTemplate',jsonData["analyticsTempalte"]);
此外:

var newRecord = this.get('store').createRecord('analyticsTemplate');
for(var key in jsonData["analyticsTemplate"]){
    o.set(key,jsonData["analyticsTemplate"][key]);
}
使用上述任何一种方法,我都可以看到表中列出的新记录,但当我单击该记录向下钻取到“analyticsTemplate”路径时(类似于从post->post开始),我发现js错误:

parameters.forEach(function (parameter) {
    discreteCategories[parameter.get('category')] = 1;
});
我定义了一个DS.transform来将参数转换为ArrayProxy,我认为当我加载记录时,这个转换不会像我所做的那样执行,因此子路由不知道如何处理参数。那么在这种情况下如何应用转换呢

我希望我能申请:

this.get('model').reload()


但这似乎适用于ObjectController上下文,而不适用于ArrayController。朋友们,有什么想法/选择吗?

天哪,恩伯让事情变得如此简单,我正试图找到解决问题的办法。所以我所要做的就是在我的控制器操作中添加这些:

ajaxFileUpload: {
     var self = this;
    //do upload stuff, add record to DB
    .....
    var analyticsTemplateData = $.parseJSON(responseText);
    var id = analyticsTemplateData["analyticsTemplate"]["id"];
    var store =self.get('store');
    store.find('analyticsTemplate',id);
}
这将花费一个服务器请求,我认为这并没有那么糟糕,并且可以完成任务。但是如果你知道另一种加载数据的方法,而不需要额外的服务器调用,那么我会洗耳恭听。谢谢