Breezejs在angularjs中遇到麻烦

时间:2014-02-24 19:48:50

标签: javascript angularjs breeze asp.net-web-api

我正在尝试将角度视图中的值从整数更改为绑定到ngmodel的float / double值。除了整数之外,输入除外。

我的猜测是,微风在后台做了一些事情来验证“已定义属性”中的值或其他内容。但我对JavaScript原型的知识非常有限,我需要学习它。

这真的很难解释所以我创建了一个可以提供帮助的插件:http://plnkr.co/edit/Gcj0VvBE3f8DRbIjMtqt?p=preview

在插件中我还添加了一个普通对象来测试相同的值,并且在将数字更改为浮点数/双精度数时它按预期工作。

所以问题是为什么从breeze绑定到float / double值时值不会改变?

5 个答案:

答案 0 :(得分:2)

3月12日更新

我发现我认为对您的用例更好的解决方案,因为它不涉及“去抖动”,也不涉及对Breeze的任何更改。请参阅zEquivalent指令in this new plunker

提醒:您发现的问题的“最佳”解决方案仍然在Breeze核心团队中播出。在我们提出更明确的建议之前,您不应该锁定特定的结果。

p.s。:我应该提到Jay和我是Breeze核心团队的成员。我们正在尽最大努力让你摆脱困境,但有时我们会过快地移动你。请跟我们一起。

截至3月12日,该答案已弃用

  

将其留在这里以达到“历史”的目的。

我认为你应该首先尝试zEquivalent指令。

重要的是要知道Angular团队正致力于对包含“去抖动”的数据绑定进行强大的扩展,这对于许多场景来说仍然是一个好主意。 Angular GitHub网站上的See this (long) pull request thread

原始答案

考虑当前位于in this plunkerzDebounce指令,该指令基于@ qorsmond的第二次尝试。

我想知道你的想法。我倾向于称之为“解决方案”并将其添加到Breeze Labs。如果/我将其添加到实验室,我会更新此答案。

答案 1 :(得分:2)

我已经检查了GitHub的初步修复程序。请检查一下,让我知道它是否有效。我们还在测试它。

此问题是由Angular的(新)行为引起的,如果角度摘要周期没有看到模型属性的更改,那么它似乎将UI重置为之前的摘要周期。所以..这个修复背后的想法是说服角度模型值已经改变,即使它没有。

和..很好的捕获(这不明显,你的plunkr帮助):)

  沃德补充说:你必须喜欢微风团队的响应能力:-)杰伊跳上了这一点并提出了一个有趣的解决方案。但请在周杰伦的答案中注明" 初步" 。我们正在讨论这个"修复"在内部,它可能会被撤回。考虑zEquivalent指令in this new plunker或者等到尘埃落定。

答案 2 :(得分:0)

你可以使用input type =“number”step =“any”并使用css隐藏箭头

答案 3 :(得分:0)

我在breeze代码中跟踪了行为,当值被更改时被截获并解析:

var coerceToFloat = function (source, sourceTypeName) {
   if (sourceTypeName === "string") {
        var src = source.trim();
        if (src === "") return null;
         var val = parseFloat(src);
        return isNaN(val) ? source : val;
    }
    return source;
};

因此,当值更改时,调用此函数将字符串解析为float,问题是输入的值是某个数字,而5.之类的点将其解析为数字{{1巫婆显然是正确的。所以你永远无法超越这一点。

将输入更改为数字类型时,它的工作原理是因为它的sourceTypeName不是字符串。

<强>更新

我最后改变了微风代码以便输入小数,我仍然不确定我是否错过了一些东西,但这对我有用。

5

答案 4 :(得分:0)

这不适用于可能使用指数形式输入的大小数字。如果我想输入2.55e35(大工资;)),当前的实现将停在'e'。有没有一种简单的方法来解决这个问题?