【发布时间】:2015-03-25 23:01:27
【问题描述】:
我已使用以下链接根据输入文本对选择选项进行过滤: 1.http://jsfiddle.net/tyrsius/67kgm/ 2.http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html 3.Using Knockout to Filter ViewModel Data Using Multiple Fields/Columns and Controls
遇到错误:除非您指定“写入”选项,否则无法将值写入 ko.computed。如果您想读取当前值,请不要传递任何参数。
做了一些研究,发现下面的链接来解决 1.Possible Bug: Breeze.js 1.5 -- Cannot write a value to a ko.computed unless you specify a 'write' option 2.Cannot write a value to a ko.computed unless you specify a 'write' option
但仍然面临无法找到解决方案的错误。谁能帮助我,我知道这个问题大部分时间都在问。具有讽刺意味的是,我无法找到解决方案。错误在哪里??。
function AccessLevelVM() {
var self = this;
self.AccessLevel_nameSearch = ko.observable();
self.PositionTypeJobDesc = ko.computed(function () {
var filter = self.AccessLevel_nameSearch();
if (!filter) {
return self.PositionTypeJobDesc();
} else {
return ko.utils.arrayFilter(self.PositionTypeJobDesc(), function (item) {
return ko.utils.stringStartsWith(PositionTypeJobDesc.PositionByDept.toLowerCase(), filter.toLowerCase());
});
}
});
}
$(document).ready(function () {
ko.utils.stringStartsWith = function (string, startsWith) {
string = string || "";
if (startsWith.length > string.length) return false;
return string.substring(0, startsWith.length) === startsWith;
};
var Model = new AccessLevelVM()
ko.applyBindings(Model, document.getElementById('AccessLevelForm'));
});
HTML
<div class="panel-body">
<div class="row">
<div class="col-md-12">
<div class="input-group">
<input type="text" name="SearchAccessLevel" class="form-control" placeholder="search" data-bind="value: AccessLevel_nameSearch, valueUpdate: 'afterkeydown'" />
<span class="input-group-addon glyphicon glyphicon-search"></span>
</div>
</div>
</div>
<div class="well" style="max-height: 300px;">
<select class="form-control input-sn" style="width: 94%;" size="4" name="sometext"
data-bind="options: PositionTypeJobDesc, optionsText: 'PositionByDept', optionsValue: 'PositionDepartmentRelId', optionCaption: ' Choose Job Position ... ', value: selectedPositionType, validationElement: selectedPositionType, event: { change: OnChangeJobPosition } " data-required="true">
</select>
</div>
</div>
【问题讨论】:
-
您可以尝试制作一个示例 repro(jsfiddle.net) 来重现您的问题。简而言之,计算的和可观察的不应具有相同的名称
self.PositionTypeJobDesc。欢呼 -
self.PositionTypeJobDesc 是一个 ko.observableArray([])。我们如何在 obserableArray 上执行计算.????
-
这样的事情你应该执行jsfiddle.net/supercool/74dh736s/47。欢呼
-
@supercool - 谢谢你对我有用....很好的样品......喜欢它
标签: javascript jquery knockout.js