Knockout.js 如何对标题中的元内容使用数据绑定?

Knockout.js 如何对标题中的元内容使用数据绑定?,knockout.js,meta-tags,Knockout.js,Meta Tags,我在页面上有一个项目列表,选中该列表后,用户将进入该特定项目页面。每个页面都需要一个带有项目名称和编号的元标记。为每个项目生成的页面都是动态的。我一直在尝试使用击倒绑定,但运气不佳 <meta name="DocumentType" content="ITEM"> <meta name="Number" data-bind="text: itemNumber"> <meta name="Name" data-bind="text: itemName">

我在页面上有一个项目列表,选中该列表后,用户将进入该特定项目页面。每个页面都需要一个带有项目名称和编号的元标记。为每个项目生成的页面都是动态的。我一直在尝试使用击倒绑定,但运气不佳

<meta name="DocumentType" content="ITEM">
<meta name="Number" data-bind="text: itemNumber">
<meta name="Name" data-bind="text: itemName">

在本页的其余部分,我已经使用视图模型和applyBindings成功地使用了数据绑定。我已将itemName和itemNumber包含到视图模型中,因此它们将返回结果。此时,如何将数据绑定到元标记

我已尝试使用attr标记遵循敲除文档:

我还尝试在此处执行绑定到html标题的操作:


我在这方面运气不好。我可能做错了,但是非常感谢您的帮助。

您应该能够将数据绑定应用于任何DOM元素。您没有提供如何调用ko.applyBindings,但我在自己的项目中使用的是:


应用绑定(pageModel,document.getElementsByTagName('html')[0]);


通过将顶级HTML元素传递给它,在下找到的任何dom元素都应该绑定到数据绑定元素。

我通过在head元素上应用数据绑定解决了这个问题,或者您也可以在HTML元素上应用数据绑定,正如Chris Knoll在前面的回答中提到的那样

然后继续将“文本”绑定添加到title元素:

<title data-bind="text: title"></title>
使用自定义绑定对内容属性进行数据绑定的元元素:

// extra custom binding to bind content attribute of meta element
ko.bindingHandlers.metaContent = {
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        // This will be called once when the binding is first applied to an element,
        // and again whenever any observables/computeds that are accessed change
        // Update the DOM element based on the supplied values here.
        let contentAttribute = 'content';
        if (contentAttribute in element) {
            let value = valueAccessor();
            let valueUnwrapped = ko.unwrap(value);

            if (valueUnwrapped)
                element.content = valueUnwrapped;
        }
    }
};
<meta name="description" data-bind="metaContent: description" />

为完整起见,我的viewmodel:

export class Head {
    public title: KnockoutObservable<string> = ko.observable("My title");        
    public description: KnockoutObservable<string> = ko.observable("My description");

    constructor() {            
        ko.applyBindings(this, $("head")[0]);
    }
}
导出类头{
公开标题:KnockoutObservable=ko.observable(“我的标题”);
公开描述:KnockoutObservable=ko.observable(“我的描述”);
构造函数(){
ko.applyBindings(本,$(“标题”)[0]);
}
}