SharePoint 2013: Knockout JS + Rest Service展现List数据

SharePoint 2013: Knockout JS + Rest Service展现List数据 jquery

 

前提: 本文假设阅读者已经对Knockout JS和SharePoint Rest Service有所了解。web

在SharePoint取出List的数据并展现在页面上的方法有不少种。例如直接编辑页面,添加一个list view web part,或者添加一个Visual web part, 经过C#代码取得并展现,或者经过SharePoint Client Object Model取得数据等等。 ajax

 

本文采用的方法是经过SharePoint Rest Service取得数据并经过Knockout JS绑定到页面中。这种方法的好处是能够应用到SharePoint Sandbox solution中。在Sandbox solution中, C#代码是受到严格限制的,而JavaScript则没有这方面的限制。 json

 

在网站中建立了一个名为"WebSites"的List, 并在里面建立了一个名为"SiteURL"的列,该列为"Hyperlink"类型。 api

往List中添加几条数据,以下图所示: app

 

至此准备工做已经完成,下一步就开始实际的编码。 网站

首先要在页面中引用相关的JS, Knockout用到的有2个,再引用Jquery就能够了。 this

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.1.min.js"></script>编码

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>url

<script type="text/JavaScript" src="knockout.mapping-latest.js"></script>

 

页面中的HTML代码很简单,具体以下:

<div data-bind="foreach:Sites">

<a target="_blank" data-bind="attr: { href: SiteURL.Url()}" ><div data-bind="text:Title"></div></a>

</div>

<script>

BindWebSites();

    </script>

其中BindWebSites是咱们本身定义的一个JS方法,用来经过Rest取得LIST中的数据并绑定到页面。详细定义以下:

function BindWebSites(){

$(document).ready(function () {

 

     var restUri ="http://[换成实际的网站地址]/_api/web/lists/getByTitle('WebSites')/items?$select=Title,SiteURL&$orderby=Created desc";

$.ajax({

type: 'GET',

url: restUri ,

dataType: 'json',

headers: {

'accept': 'application/json;odata=verbose',

'content-type': 'application/json;odata=verbose'

},

success: function (data) {

     AddSitesToPage(data);

}

     });

    });

 

}

 

function AddSitesToPage(data){

var ContactsModel = function (Sites) {

var self = this;

self.Sites= ko.mapping.fromJS(Sites);

self.lastSavedJson = ko.observable("");

};

 

ko.applyBindings(new ContactsModel(data.d.results));

}

页面展现效果以下:

其实JS和HTML代码都很简单,只是有几个须要注意的地方:

  1. 咱们须要在页面上展现Title和SiteURL 2个字段便可,由于在Rest Service调用时使用了select=Title,SiteURL来取得这2个字段。
  2. 在绑定HTML数据时,对连接有些特殊处理: data-bind="attr: { href: SiteURL.Url()}" 绑定的是SiteURL.Url()而不是SiteURL(). 能够经过监测返回的数据得知SiteURL是一个对象,而不是一个字段。

  3. 若是SiteURL为空,就会在绑定时报错。

    由于在HTML绑定时对SiteURL可进行以下处理:

<!-- ko if: SiteURL.Url -->

<a target="_blank" data-bind="attr: { href: SiteURL.Url()" ><div data-bind="text:Title"></div></a>

<!-- /ko -->

<!-- ko ifnot: SiteURL.Url -->

<div data-bind="text:Title"></div>

<!-- /ko -->

相关文章
相关标签/搜索