保存模型后获取服务器的答案

时间:2014-03-25 03:02:02

标签: ember.js ember-data

我在节点js服务器上使用Ember数据;模型看起来很简单:

Gmcontrolpanel.Product = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
});

一旦节点服务器收到product.save(),它就会将记录保存在mysql数据库中,管理记录ID并回答如下:

{
  product
      {
         id: 1,
         name: "aaa",
         description "bbb"
      }
}

我需要获取服务器响应的id(不是save()返回的promise。then(),其中id为null);我怎么能得到它?

更新

节点服务器,使用express:

GMserver.post('/products', function (req, res) {
    rootName = "product";
    queryString = 'INSERT INTO products (id, name, descriptions ) VALUES ( '+ counters.prodcuts +', "' + req.body.product.name + '", "' + req.body.product.description + '")';
    executeQuery(req, res, queryString);
    responseToPost(counters.products, req.body.product, rootName, res);

    counters.products++;
});

function executeQuery (req, res, querystring) {
    connection.query(queryString, function(err, rows, fields){
        if (err) throw err;   
    });
}

function responseToPost (id, data, rootName, res) {
    var result = new Object();
    result[rootName] = new Object();
    var i = 0;
    var answer;

    result[rootName].id = id;
    for(var key in data) 
    { 
        result[rootName][key] = data[key];
    }

    answer = JSON.stringify(result, null, '\t');

    console.log(answer);
    res.send(answer);
}

我可以在这里的答案日志中看到,答案是上面写的答案; 我试图更改responseToPost以始终发送如下静态值:

result[rootName][key] = 'aaa';

但在Ember,正在做

product.save().then(function(savedProduct) {
    console.log(savedProduct.get('name'));
}

我得到名字的总和值,而不是我预期的'aaa'......

第二次更新: 做在Ember

product.save().then(function(savedProduct) {
    console.log(savedProduct);
}

要查看保存的产品是什么,在Chrome中我会看到日志的结果:

Class {id: null, store: Class, container: Container, currentState: (...), errors: Class…}
 __ember1395755543625: "ember548"
 __ember1395755543625_meta: Object
 __nextSuper: undefined
 _attributes: Object
 _changesToSync: Object
 _data: Object
     __ember1395755543625_meta: Meta
     _super: function superFunction(){
     name: "asdf"
     description: "asdfa"
    __proto__: Object
_deferredTriggers: Array[0]
_inFlightAttributes: Object
_relationships: Object
_suspendedRelationships: false
_updatingRecordArraysLater: false
container: Container
currentState: (...)
get currentState: function () {
set currentState: function (value) {
data: (...)
errors: Class
id: null
isError: false
store: Class
toString: function () { return ret; }
__proto__: Object

其中“asdf”和“asdfa”是我在应用程序的插入表单中键入的值

1 个答案:

答案 0 :(得分:3)

如果返回JSON,则应更新记录。

product.save().then(function(record){ //record is the same as product here
  console.log(record.get('id'));
});