许多最现代的、响应和迷人的基于web的ui已超越传统的Ajax并单页应用程序:

游客可以在看似导航在单一页面在本机应用程序的速度。最著名的例子可能是GMail,但现在这是一个越来越普遍的技术。

案例一:构建一个电子邮件客户端      

你有一个简单的视图模型,目前仅持有一个文件夹列表。你的第一份工作是在屏幕上显示这些文件夹,并让他们选择。

您可以使用foreach来显示文件夹列表。添加以下你的观点:

1 <ul data-bind="foreach: folders">

     <li data-bind="text: $data"></li>
 </ul>

如果你运行应用程序时,你应该有一个项目符号列表。很好和语义,但不是很有吸引力!改善的样式类的文件夹添加到< ul >:

<ul class="folders" data-bind="foreach: folders">

这使得它看起来好多了。

使文件夹选择
因为这是MVVM,我们将代表导航位置使用viewmodel属性。这将使基于散列的导航很容易。viewmodel类添加一个chosenFolderId属性,一个名为goToFolder的函数

function WebmailViewModel() {
    // Data
    var self = this;
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
    self.chosenFolderId = ko.observable();     // Behaviours
    self.goToFolder = function(folder) { self.chosenFolderId(folder); };

};

现在你可以使用css绑定应用选择类匹配的文件夹中,并调用goToFolder每当用户点击一个文件夹:

<li data-bind="text: $data, 
               css: { selected: $data == $root.chosenFolderId() },

click: $root.goToFolder"></li>

试一试,你现在应该看到文件夹成为突出当你点击它们。

 案例二:显示一个网格的邮件

现在,游客可以选择一个文件夹,让我们向他们展示该文件夹中的邮件。首先定义一个chosenFolderData属性在你的ViewModel

function WebmailViewModel() {
    // Data
    var self = this;
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
    self.chosenFolderId = ko.observable();
    self.chosenFolderData = ko.observable();     // Behaviours    
    self.goToFolder = function(folder) { self.chosenFolderId(folder); };

};

接下来,每当用户导航到一个文件夹中,填充chosenFolderData通过执行Ajax请求:

self.goToFolder = function(folder) {

    self.chosenFolderId(folder);
    $.get('/mail', { folder: folder }, self.chosenFolderData);
};

最后,显示 chosenFolderData 作为一个网格,通过添加以下视图的底部:

Knockout.Js案例三单页面应用程序的更多相关文章

  1. Ember.js实现单页面应用程序

    1.1.1 摘要 单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序. SPA使用AJAX和HTML5创建流畅且响应迅速的Web应用程序,不会经常 ...

  2. Knockout.Js案例一Introduction

    </strong></p> <p>Last name: <strong data-bind="text:lastName ">tod ...

  3. Knockout.Js案例二Working With Lists And Collections

    案例一:Foreach绑定 通常,您要生成重复的UI元素,特别是当显示列表,用户可以添加和删除元素.KO.JS让你轻松,使用的数组和foreach绑定. 在接下来的几分钟,您将构建一个动态UI保留席位 ...

  4. Knockout JS实现任务管理应用程序

    1.1.1 摘要 在博文<Ember.js实现单页面应用程序>中,我们介绍了使用Ember JS实现一个单页应用程序 (SPA),这使我想起了几年前写过一个任务管理程序,通过选择日期,然后 ...

  5. Knockout.js 数据验证之插件版和无插件版

    本文我们将介绍使用 Knockout.js 实现一些基本的数据验证.就如我们在标题里提到的,我们会使用两种方法来创建数据验证方法. 使用自定义方法,不需要任何插件 最简单的方法是使用已有的插件 如果你 ...

  6. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  7. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  8. Knockout.js 组件

    Knockout.js是一个基于MVVM模式的轻量级的前端框架,有多轻?根据官网上面显示的最新版本v3.4.0,仅22kb.能够友好地处理数据模型和界面DOM的绑定,最重要的是,它的绑定是双向的,也就 ...

  9. Knockout.js随手记(1)

    新的开始,knockout.js 1.首先去http://knockoutjs.com/index.html下载knockout.js,最新的版本是2.3 2.知道什么是Knockout?它是个Jav ...

随机推荐

  1. 收集的一些jQuery (我平常用的少的,但确实挺有效果的)

    禁用Jquery(动画)效果 jQuery.fx.off = true; 使用自己的 Bullets(这个有一丁点儿的小技巧) //这里是js代码 也就是给每个ul添加一个类名 然后给ul的子li前面 ...

  2. Mysql和Memcached的连动

    Memcached 和 mysqld 的联通 一 概述: what's UDFs ? UDFs是User Defined Functions的缩写,表示Mysql用户自定义的函数,应用程序可以利用这些 ...

  3. 关于 客户端发现响应内容类型为“text/html; charset=utf-8”,但应为“text/xml”的解决方法

    http://www.cnblogs.com/jams742003/archive/2008/10/30/1322761.html 请求web服务时,会有如题的异常出现,解决方法如下: 1 检查web ...

  4. 阻塞式socket例子学习

    /************************************************************************* > File Name: Win_Serve ...

  5. re正则表达式5_*

    *表示匹配[0,正无穷大]次 * means math zero or more-----occur any number of times in the text. # -*- coding: ut ...

  6. JavaScript排序算法——希尔排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. JavaScript学习笔记——数组

    javascript数组数组是一个可以存储 一组 或是 一系列 相关数据 的 容器. 一.为什么要使用数组. (1)为了解决大量相关数据的存储和使用的问题. (2)模拟真是的世界. 二.如何创建数组 ...

  8. socket+mysql

    测试windows 下 Socket+Mysql调用. 环境: OS:Win7; DBMS:Mysql;  IDE:codeblockS. server: #include <WINSOCK2. ...

  9. FingerGestures for Unity3D

    FingerGestures http://fingergestures.fatalfrog.com

  10. 设计模式学习——观察者模式(Observer Pattern)

    0. 前言 观察者模式在许多地方都能够用到,特别是作为MVC模式的一部分,在MVC中,模型(M):存放数据,视图(V):显示数据.当模型中的数据发生改变时,视图会得到通知,这是典型的观察者模式. 1. ...