>在這裡,將為書籍數組中的每個數組條目自動創建一個表行。
有時,您可能需要參考數組條目本身,而不僅僅是其屬性之一。在這種情況下,您可以使用偽可行的$數據。它的意思是“當前項目”,當在foreach塊中使用時。<table> <thead> <tr><th>Title</th><th>Author</th></tr> </thead> <tbody data-bind="foreach: books"> <tr> <td data-bind="text: title"></td> <td data-bind="text: author"></td> </tr> </tbody> </table> <script type="text/javascript"> function viewModel() { var self = this; self.books = ko.observableArray([ { title: 'The Secret', author: 'Rhonda Byrne' }, { title: 'The Power', author: 'Rhonda Byrne' }, { title: 'The Magic', author: 'Rhonda Byrne' } ]); } ko.applyBindings(new viewModel()); </script>
這將列出一周中的整個天數,而無需分別重複每個項目的代碼。
$ parent - 表示當前foreach塊之外的數據項
<ul data-bind="foreach: daysOfWeek"> <li> <span data-bind="text: $data"></span> </li> </ul> <script type="text/javascript"> function viewModel() { var self = this; self.daysOfWeek = ko.observableArray([ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ]); }; ko.applyBindings(new viewModel()); </script>
$ root - 表示最外面控制流範圍的項目。通常,這是您的頂級視圖模型對象。
在以下示例中,我們使用$ parent pseudovariable,以便從書籍數組中正確刪除書籍項目:
<table> <thead> <tr><th>Title</th><th>Author</th></tr> </thead> <tbody data-bind="foreach: books"> <tr> <td data-bind="text: title"></td> <td data-bind="text: author"></td> </tr> </tbody> </table> <script type="text/javascript"> function viewModel() { var self = this; self.books = ko.observableArray([ { title: 'The Secret', author: 'Rhonda Byrne' }, { title: 'The Power', author: 'Rhonda Byrne' }, { title: 'The Magic', author: 'Rhonda Byrne' } ]); } ko.applyBindings(new viewModel()); </script>
在某些情況下,您可能需要復制一部分標記,但是您沒有任何容器元素可以放置限制性。然後,您可以使用以下語法:
<ul data-bind="foreach: daysOfWeek"> <li> <span data-bind="text: $data"></span> </li> </ul> <script type="text/javascript"> function viewModel() { var self = this; self.daysOfWeek = ko.observableArray([ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ]); }; ko.applyBindings(new viewModel()); </script>
>
if綁定會導致標記部分出現在您的文檔中,只有當指定的表達式評估為true時。然後,文檔中將存在包含的標記,並且將應用其上的任何數據綁定屬性。另一方面,如果您的表達式評估為false,則包含的標記將從您的文檔中刪除,而無需先對其施加任何綁定。>
帶有綁定的<table> <thead> <tr><th>Title</th><th>Author</th></tr> </thead> <tbody data-bind="foreach: books"> <tr> <td data-bind="text: title"></td> <td data-bind="text: author"></td> <td><a href="#" data-bind="click: $parent.removeBook">Remove</a></td> </tr> </tbody> </table> <script type="text/javascript"> function viewModel() { var self = this; self.books = ko.observableArray([ { title: 'The Secret', author: 'Rhonda Byrne' }, { title: 'The Power', author: 'Rhonda Byrne' }, { title: 'The Magic', author: 'Rhonda Byrne' } ]); self.removeBook = function() { self.books.remove(this); } } ko.applyBindings(new viewModel()); </script>
templating
<ul> <li><strong>Days of week:</strong></li> <!-- ko foreach: daysOfWeek --> <li> <span data-bind="text: $data"></span> </li> <!-- /ko --> </ul> <script type="text/javascript"> function viewModel() { var self = this; self.daysOfWeek = ko.observableArray([ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ]); }; ko.applyBindings(new viewModel()); </script>
在以下示例中,您可以看到如何在行動中使用它: >在這裡,我們必須使用模板名稱等於模板名稱的ID才能將模板綁定到我們的標記的其餘部分。在這種情況下,它是“書本”。 >而不是使用上述簡短的語法,我們可以將更多參數傳遞給模板綁定,這將使我們更精確地控制最終輸出。
>以下示例等同於foreach綁定。在這裡,foreach作為參數傳遞給了模板綁定。
使用模板的第二種方法是將基因淘汰賽連接到第三方模板引擎。敲除將使您的模型值傳遞給外部模板引擎,並將所得的標記字符串注入文檔。有關使用 下劃線模板引擎的示例
擴展可觀察到的
>現在我們將創建一個可觀察的擴展器,該擴展器將添加顯示提示消息的能力。 自定義綁定 淘汰賽的內置綁定允許您處理大多數綁定方案,但是如果您遇到未涵蓋的專門綁定方案,則可以使用敲除創建自定義綁定,從而使您非常靈活地將復雜的行為封裝在一個易於重複的方式。例如,您可以以自定義綁定的形式創建交互式組件,例如網格,卡屏等。
INIT函數僅在第一次評估該元素的綁定時運行。這通常用於運行一次性初始化代碼或連接事件處理程序,使您根據UI中的事件更新視圖模型。 更新功能提供了一種方法,當修改了相關的可觀察結果時。通常,這用於根據視圖模型的更改來更新您的UI。 啟動和更新功能提供了四個參數。通常,您將需要關注元素和valueAccessor參數,因為它們是將視圖模型鏈接到UI的標準方法。您實際上不必同時提供初始化和更新回調 - 如果您需要的話,您只需提供一個或另一個。
<table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
}
ko.applyBindings(new viewModel());
</script>
<ul data-bind="foreach: daysOfWeek">
<li>
<span data-bind="text: $data"></span>
</li>
</ul>
<script type="text/javascript">
function viewModel() {
var self = this;
self.daysOfWeek = ko.observableArray([
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
]);
};
ko.applyBindings(new viewModel());
</script>
<table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
<td><a href="#" data-bind="click: $parent.removeBook">Remove</a></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
self.removeBook = function() {
self.books.remove(this);
}
}
ko.applyBindings(new viewModel());
</script>
<ul>
<li><strong>Days of week:</strong></li>
<!-- ko foreach: daysOfWeek -->
<li>
<span data-bind="text: $data"></span>
</li>
<!-- /ko -->
</ul>
<script type="text/javascript">
function viewModel() {
var self = this;
self.daysOfWeek = ko.observableArray([
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
]);
};
ko.applyBindings(new viewModel());
</script>
創建擴展器涉及將函數添加到ko.extenders對象。該函數將可觀察到的本身作為第一個參數和第二個參數中的任何選項。然後,它可以返回可觀察到的東西,也可以返回新的東西,例如以某種方式使用原始觀察的計算可觀察的可觀察的東西。
>
<table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
}
ko.applyBindings(new viewModel());
</script>
> ViewModel參數將為模板之外的綁定提供訪問您的整體視圖模型。在模板內部,將其設置為被綁定到模板的數據。例如,當使用模板綁定的foreach選項時,視圖模型參數將設置為通過模板發送的當前數組成員。在大多數情況下,ValueAccessor會為您提供所需的數據,但是如果您需要對像在呼叫/應用函數時,ViewModel參數特別有用。
首先,在INIT函數中,我們聲明,當元素焦點為焦點時,其值將設置為true,反之亦然。然後,在更新功能中,我們使用AllBindingAccessor參數將其他選項添加到我們的綁定 - scaleup和scaledown。我們使用ko.utils.unwrapobservable來獲取當前綁定的值,並檢查設置為true。如果是這樣,則將DOM元素縮放,否則將其縮放。
>
終於讓我們看一個示例,結合了可觀察的擴展器和scaleonfocus自定義綁定: >您可以將可觀察的提示放在單獨的文件中,然後將它們包含在主文件中。這使得代碼模塊化,並允許您在需要時重新使用它。 就是這樣,伙計們!希望您喜歡這個系列。現在,您擁有所有必要的知識,可以繼續學習和實驗淘汰賽。有關更全面的示例和教程,您可以訪問淘汰網站,我建議您做。
> 一系列物品到您的HTML的一部分。它為數組中的每個項目複製關聯的DOM元素及其後代,創建一個循環。當您想顯示UI中的項目列表時,這特別有用。 foreach綁定還為每次迭代提供了一個上下文,使您可以使用$ Data關鍵字訪問當前項目。 我如何與gockutjs中的集合一起工作? >如何處理nockoutjs中的事件? >如何使用瀏覽器的開發人員工具來完成debug quigning junckoutjs應用程序?您可以使用Console.Log打印值,或使用斷點暫停執行並檢查應用程序的當前狀態。 QuintOutJs還提供了KO.TOJSON函數,可以將您的視圖模型轉換為JSON字符串,以易於檢查。 <table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
}
ko.applyBindings(new viewModel());
</script>
>
> ko.utils.utils.unwrapobservable在quignoutjs中的wrapobservable? > ko.utils.utils.unwrapobservable在quignoutjs中的函數用於檢索可觀察到的當前值或不可觀察的值。當您不確定是否正在處理可觀察的或不可觀察的情況下,此功能特別有用。它允許您處理這兩種情況,而無需為每個情況編寫單獨的代碼。此功能是敲除效用函數的一部分,可提供其他功能,使使用可觀察到的功能更容易。 > nockoutjs中的映射插件是什麼?
我在QuignOutJs中找到了一個問題,我可以在哪里報告?如果您在QuintOutJs中找到了問題,則可以在gockoutjs github頁面上報告。在報告問題之前,最好檢查其他人是否已經報告了該問題。如果沒有,您可以創建一個新問題並提供盡可能多的細節,以幫助淘汰賽團隊理解並解決該問題。
>我如何在quignOutJs中使用計算的可觀察物?
>我如何在quotigoutjs中使用自定義綁定?
我如何測試quignOutjs應用程序?
測試quotegoutjs應用程序可以是使用JavaScript測試框架(例如茉莉花或摩托馬)完成。這些框架使您可以為您的視圖模型編寫單元測試,以確保它們的行為如預期的。在測試QuintOutJS應用程序時,最好盡可能地將視圖模型與DOM分開,以使測試更容易。 >
以上是淘汰賽初學者指南:第3部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!