可编辑文本和beforeUpdate挂钩(Meteor)的问题

时间:2015-04-21 15:12:54

标签: javascript meteor callback

人。我正在研究我的第一个严肃的Meteor项目,我遇到了一些问题。

我这里有一个小页面,其中包含一个类别表,我使用可编辑文本来允许几个字段的就地编辑功能。编辑似乎有效,但为了处理一些验证,我已经编写/附加了一个回调来处理我文档的beforeUpdate字段上的limit回调。

回调似乎......好......回调,但它对我的数据没有影响,我相信它应该有。基本上,如果用户键入43之类的值,我希望此回调强制值为43.00(必须小数点后两位)。

此代码段包含回调本身:

EditableText.registerCallbacks({

    // Callback for editing category limit/budget.
    budgetCurrency: function(doc) {
        // Variables based on editing.
        var oldVal = this.oldValue;
        var newVal = this.newValue;

        // Verification:
        if (isNaN(newVal)) {
            // Reject value if not a number, don't make change.
            oldVal;
        } else {
            newVal = Number(newVal);
            console.log(newVal.toFixed(2));
            return _.extend(doc, {limit: newVal.toFixed(2)});
        }
    }
});

我不确定我是否做错了。通过console.log()返回的值正如我所期望的那样,但是相同的值(在代码中)不会最终存储在更新的文档中。

非常感谢任何帮助。就我所知道的所有事情而言,我可能只是忽略了beforeUpdate如何工作(回调)。

相关软件包的文档位于:https://atmospherejs.com/babrahams/editable-text

1 个答案:

答案 0 :(得分:0)

正在发生的事情正如预期的那样。 Javascript Number无法直接存储到mongo中。它必须转换为int或float / double。在你的情况下,它被转换为一个没有小数点的int。

以下是您的选择:

  1. 将值存储为字符串(并且无法执行mongo airthmatic操作,例如inc等。)
  2. 将值存储为两个单独的整数,分为小数点前后的美元和美分。
  3. 使用浮动或双精度和松散精度(仅当您存储近似值时才使用此值,因为这不适用于确切的财务值)