微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – Angular / Breeze SPA模板上的UnMapped属性

我在visual studio 2012中使用Angular / Breeze SPA模板.我在TodoList服务器模型中添加一个未映射的属性.
[NotMapped]
public string MyUnmappedProperty{ get{return "testString";}}

我在客户端模型的构造函数注册了未映射的属性,特别是在Ward建议的todo.model.js中:Handling calculated properties with breezejs and web api

function TodoList() {
        this.title = "My todos"; // defaults
        this.userId = "to be replaced";
         this.myUnmappedProperty="";
    }

当第一次在todo.controller.js上调用getTodos()方法时,“myUnmappedProperty”具有构造函数中设置的空字符串的值.只有在第二次调用getTodos()之后(我添加一个执行该操作的按钮)并将’forceRefresh’设置为true(getTodos(true))才能查询服务器,只有这样才能看到myUnmappedProperty获取值“的TestString”.

我想知道为什么我会得到这种行为.是否可以在第一次调用getTodos()时使未映射的属性填充服务器值?

谢谢.

你找到了解决这个问题的方法吗?我一直在努力解决同样的问题,最近才发现了CassidyK的 this SO post,他通过改变Breeze源代码(breeze.debug.js)中的一行解决一个非常类似的问题.这是他改变的代码片段(取自CassidyK的帖子):
proto.initializefrom = function (rawEntity) {
    // HACK:
    // copy unmapped properties from newly created client entity to the rawEntity.
    // This is so that we don't lose them when we update from the rawEntity to the target.
    // Something that will occur immediately after this method completes. 
    var that = this;
    this.entityType.unmappedProperties.forEach(function(prop) {
        var propName = prop.name;
        that[propName] = rawEntity[propName];  // CassidyK 
        //rawEntity[propName] = that[propName]; // Breeze 
    });

    if (!this._backingStore) {
        this._backingStore = { };
    }
};

我试过这个解决方案,似乎工作得很好.请注意,如果您遇到的服务器端属性未映射到数据库中,并且在客户端创建对象时需要客户端覆盖此值,则此更改可能会让您遇到麻烦.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐