javascript - knockout 实时搜索

标签 javascript jquery knockout.js knockout-2.0

我目前正在学习 knockout ,并且正在尝试使用该库可以实现的各种功能。我想做的一件事是创建“实时搜索”。 (下面是代码笔)

我收到的错误是无法读取未定义的属性“toLowerCase”。对我来说,我的代码看起来是正确的,我猜测某个地方存在新手错误。

self.tracks() 中的数据从 soundcloud 中获取并推送到 observableArray 中。如果我删除“compulatedTracks”的所有实例,我的 HTML 模板会完美地呈现这些轨道 - 看起来该函数无法读取 self.tracks()?

HTML:

<input placeholder="Search..." type="search" data-bind="value: searchQuery">

<div class="view-tracks">
    <ul data-bind="foreach: computedTracks">
        <li data-bind="click: $root.goToTrack">
            <span data-bind="text: track"></span>
        </li>
    </ul>
</div>

KO:

self.computedTracks = ko.computed(function() {
                return ko.utils.arrayFilter(self.tracks(), function(item) {
                    return item.track.toLowerCase().indexOf(self.searchQuery().toLowerCase()) >= 0;
                });
            });

如果有人能强调我在这方面的错误,我将不胜感激。

完整演示:

http://codepen.io/anon/pen/EHgdx

最佳答案

CodeOpen

问题是您的 searchQuery 可观察值的初始值设置为未定义。您必须检查它是否已定义,然后调用 toLowerCase() 或为其设置默认值 '' 。就像我在 codeopen 演示中所做的那样。

self.searchQuery = ko.observable('');

关于javascript - knockout 实时搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397975/

相关文章:

javascript - 默认情况下如何在 Bootstrap 中隐藏侧边栏?

javascript - 执行此代码时我看不到警报框

javascript - 将 "document.getElementById"转换为 jQuery

javascript - 在不丢失选择的情况下使用 JavaScript 更改选择中的选项

c# - 无法更改所选选项

c# - REST api 不调用导航

javascript - Angular .js : using a directive to insert another directive as an attribute

javascript - 当用户单击 iframe 中的按钮时,重新加载网站(不是 iframe)

jquery - 具有变量、事件和 DOM 操作的多个 jQuery 实例

javascript - 在 knockout 中通过ajax绑定(bind)选择