javascript - 为什么我的 applyBindings 不起作用?昏死

标签 javascript knockout.js

您好,我只是想创建输入和 iframe,当我粘贴 YouTube 链接时,iframe 应该随着新的 src 而改变。到目前为止我已经这样做了

<div class="heading">id <input data-bind="text: youtubeLink"/></div>
<iframe id="player" type="text/html" width="444" height="250" frameborder="0" data-bind="attr: { src: linkEmbed }"></iframe>

在脚本中:

function MyViewModel() {
    this.youtubeLink = ko.observable('https://www.youtube.com/watch?v=4UNkmlCKw9M');
    this.linkEmbed = ko.pureComputed({
        read: function () {
                var extract = this.youtubeLink().replace("/watch?v=", "/embed/");
                console.log(extract)
                return extract;
        },
        write: function (value) {
                 this.youtubeLink();
        },
        owner: this
    });
}
ko.applyBindings(MyViewModel());

这完全符合我的要求,但如果我在输入中粘贴另一个链接,视频不会改变。

我正在使用来自 knockout 文档的这个:http://knockoutjs.com/documentation/computed-writable.html

最佳答案

你有几个问题:

  1. 您没有在模型上调用 new,而是将其编写为构造函数
  2. 您使用 text 绑定(bind)而不是 value 绑定(bind)输入
  3. 你的计算器的写没有赋值,但你也不需要它

一旦您纠正了这些问题,它就会起作用。

function MyViewModel() {
    var model = {};
    model.youtubeLink = ko.observable('https://www.youtube.com/watch?v=4UNkmlCKw9M');
    model.linkEmbed = ko.pureComputed(function () {
        var result = model.youtubeLink().replace("/watch?v=", "/embed/")
        return result;
    });
    return model;
}
ko.applyBindings(MyViewModel());

http://jsfiddle.net/ueoob7ne/2/

关于javascript - 为什么我的 applyBindings 不起作用?昏死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30605336/

相关文章:

javascript - Knockout,如何订阅observableArray的每一次变化

jquery - KnockoutJs 与 Jquery.tablesorter - 导致重复行

javascript - KnockoutJS - 单击按钮后数据绑定(bind)不会更改文本

javascript - 如何在 JavaScript 中将 1,800.00 转换为 1800?

javascript - moment.js 和 moment-timezone-with-data.js 给出错误 Unknown Provider - Moment Provider

javascript - ng-在 Angularjs 中重复多次

javascript - 从 vue.js 过滤器返回 vue 实例 (Vue.js 2)

javascript - 我不知道在这种情况下如何使用 map

javascript - 如何使用 Knockout foreach 构建多列布局?

javascript - 在 knockout.js 中的 ko.applyBindings 之后向模型添加可观察属性