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]);
}
}