मेरी आँखों में, यह स्थितियों एक नमूदार सदस्यता के लिए भीख माँगता।
...
<title>{FALL BACK TEXT}</title>
...
देखें मॉडल
ViewModel = function() {
var self = this;
self.PageTitle = ko.observable(null);
self.PageTitle.subscribe(function(newValue){ document.title = self.PageTitle() });
//change PageTitle to see your handy work in action
self.PageTitle("Hello World!");
};
संपादित करें:
मेरे पिछले जवाब के लिए एक संशोधन के रूप में, मैं आगे निम्नलिखित शामिल करना चाहते हैं। क्या मेरा पिछला सुझाव काम करेगा? हाँ, यह बहुत अच्छी तरह से काम करता है। हालांकि, दृश्य मॉडल के भीतर डीओएम हेरफेर स्वयं "बिल्कुल" एमवीवीएम प्रतिमान का पालन नहीं करता है। वास्तविक "सर्वोत्तम" दृष्टिकोण एक कस्टम बाध्यकारी बनाना होगा, जो एक विशेष अवलोकन के अद्यतन पर दस्तावेज़ शीर्षक सेट करता है।
...
<title data-bind="htmlDocumentTitle: PageTitle()">{FALLBACK TEXT}</title>
...
देखें मॉडल
ViewModel = function() {
var self = this;
self.PageTitle = ko.observable(null);
self.init = function(){
self.PageTitle("My page title from an obersvable");
};
//init the viewmodel
self.init();
};
और अंत में हमारे चमकदार कस्टम नमूदार में परिवर्तन के लिए "सुन" करने के लिए
ko.bindingHandlers.htmlDocumentTitle = {
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var fallbackTitle = "My document title";
var title = ko.unwrap(valueAccessor());
if(!title || title == null && title == "")
title = fallbackTitle;
document.title = title;
}
};
(केवल अद्यतन कार्रवाई के उपयोग पर ध्यान दें) सबसे पहले बाध्यकारी नज़र में यह समाधान कम स्केलेबल दिखाई दे सकता है, लेकिन ध्यान रखें कि हम "कॉल()" का उपयोग करके नॉकआउट व्यू मॉडल के साथ "छद्म-विरासत" बना सकते हैं।
मैं संपादन मेरा उत्तर नहीं रखना चाहते हैं - कोई मौका अपना HTML टैग काम करता है पर इस डाल? '' –
इसके अलावा, क्या आप अपनी व्यूमोडेल पर शीर्षक संपत्ति को कुछ और अधिक प्रचलित, एक अवधि की तरह बांध सकते हैं, और यह ठीक दिखाना है? –
मैंने अपना कोड थोड़ा अपडेट किया। हां, मैं सफलता के साथ अन्य स्थानों में 'शीर्षक' डेटा-बाइंड कर सकता हूं। यह केवल पृष्ठ शीर्षक है जो काम नहीं करता है। –