将函数添加到JSON对象中

时间:2015-06-10 17:18:57

标签: javascript jquery json kendo-ui kendo-grid

我有JSON对象;我们称之为模型;它有2个类型数组的属性。该模型还有一个函数“hasAnyFilterSelected”,它检查是否填充了任何数组属性。我有搜索按钮& UI上的2下拉列表。当用户单击搜索按钮时,会出现以下步骤:

1>将选定的值从下拉列表推送到模型的数组中 属性。

2> model.hasAnyFilterSelected()检查任何数组是否有值,在调试器中我看到模型填充了值。

3>如果是,则通过执行datasource.read()

刷新kendo网格

4> kendo网格调用返回模型的“getFilters”方法,再次在调试器中我看到模型填充了值。

5>然后 以某种方式 再次调用hasAnyFilterSelected(),这次模型数组属性未定义。看起来kendo正在尝试再次序列化模型,这个时间模型有不同的实例,但我不确定。

net45

我想知道为什么会这样?我正确定义了JSON功能吗?这是首选方法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的值会被保留,但您的功能会被覆盖或忽略? (正如你所指出的那样,当被复制到某个地方时可能会发生。)不要知道这第一步是否有效,但可能尝试将其写成具有原型函数的更确定的类:

var model_class = function() {
    this.selectedTaxYears = []; 
    this.selectedStates = [];
}
model_class.prototype = {
    hasAnyFilterSelected: function () {
        return !(this.selectedTaxYears.length == 0 &&                 
            this.selectedStates.length == 0)
}
var model = new model_class();

如果被覆盖,另一种方法是在单例库中的其他地方或仅在“窗口”中定义该功能。范围,然后使用' .apply':

调用它
if ( model_hasAnyFilterSelected.apply( this ) ) {
    //// etc
}