我有一个非常简单的功能:
var errorsViewModel = function () {
var self = this;
var _errors = ko.observableArray([]);
self.get = function () {
return _errors;
};
self.insert = function ( error ) {
_errors.push(error);
};
}
我想要实现的是使_errors
数组只能在其自己的函数中直接修改。也就是说,来自外部的用户可以通过get
方法获取用于阅读的数组,并仅通过insert
方法插入itsert项。
但是不能做这样的事情:
var err = new errorsViewModel();
var array = err.get();
array.push('item');
而是使用errorsViewModel接口:
err.insert('some error');
这可能吗?
答案 0 :(得分:3)
只需复制返回的数组:
self.get = function () {
return _errors.slice(0);
};
这样,当调用get
时,调用者可以根据需要对其进行更改 - 但不会修改原始文件。
答案 1 :(得分:1)
为了确保您的数组无法从作用域外部访问,我建议您通过ko.computed
公开数组,然后在插入时通知它的侦听器。
var errorsViewModel = function () {
var self = this;
var _errors = [];
self.errors = ko.computed(function () {
return self.get();
});
self.get = function () {
return _errors.splice(0);
};
self.insert = function ( error ) {
_errors.push(error);
self.errors.valueHasMutated();
};
}