如何:使用 JavaScript 处理网站
上次修改时间: 2011年6月20日
适用范围: SharePoint Foundation 2010
本文内容
使用 JavaScript 检索网站属性
使用 JavaScript 只检索网站的指定属性
使用 JavaScript 更新网站的标题和说明
创建网站
若要通过 ECMAScript(JavaScript、JScript)使用网站,应首先使用 ClientContext(serverRelativeUrl) 构造函数并传递 URL 或 URI 以返回特定请求上下文。
使用 JavaScript 检索网站属性
使用 ClientContext 类的 web 属性指定位于指定上下文 URL 处的网站对象的属性。通过 load(clientObject) 方法加载网站对象,然后调用 executeQueryAsync(succeededCallback, failedCallback) 后,将会获取对该网站的所有属性的访问权限。下面的示例显示指定网站集中根网站的标题和说明,尽管在加载网站对象和执行查询后返回的所有其他属性默认情况下都将变为可用。有关在检索特定客户端对象时默认不可用的属性列表,请参阅数据检索概述。
var siteUrl = '/sites/MySiteCollection ';
function retrieveWebSite() {
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
clientContext.load(this.oWebsite);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
alert('Title: ' + this.oWebsite.get_title() + ' Decription: ' + this.oWebsite.get_description());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
使用 JavaScript 只检索网站的指定属性
若要减少客户端和服务器之间不必要的数据传输,可能需要仅返回网站对象的指定属性,而不是返回其所有属性。在这种情况下,可将 LINQ 查询或 lambda 表达式语法与 load(clientObject) 方法结合使用,以指定从服务器返回哪些属性。在下面的示例中,在调用 executeQueryAsync(succeededCallback, failedCallback) 之后,只有网站对象的标题和创建日期是可用的。例如,如果您尝试将 oWebsite.Description 写入控制台,则会收到 PropertyOrFieldNotInitializedException。
var siteUrl = '/sites/MySiteCollection ';
function retrieveWebSiteProperties() {
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
clientContext.load(this.oWebsite, 'Title', 'Created');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
alert('Title: ' + this.oWebsite.get_title() + ' Created: ' + this.oWebsite.get_created());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
请注意,ClientContext(serverRelativeUrl) 构造函数采用相对于服务器的 URL,并且 load(clientObject) 方法接受字符串而不是实际的 LINQ 对象。这与接受实际 LINQ 对象的托管客户端对象模型不同。
使用 JavaScript 更新网站的标题和说明
若要修改网站,可设置网站的属性并调用 update()) 方法,这与服务器对象模型的工作方式相似。但在客户端对象模型中,必须调用 executeQuery(succeededCallback, failedCallback) 来请求对您指定的所有命令进行批处理。下面的示例更改指定网站的标题和说明。
var siteUrl = '/sites/MySiteCollection ';
function updateWebSite() {
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
this.oWebsite.set_title('Updated Web Site');
this.oWebsite.set_description('This is an updated Web site.');
this.oWebsite.update();
clientContext.load(this.oWebsite, 'Title', 'Description');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
alert('Title: ' + this.oWebsite.get_title() + ' Decription: ' + this.oWebsite.get_description());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
创建网站
若要创建网站对象,请使用 WebCreationInformation 类来定义其属性,再将该对象传递到 WebCollection 类的 add(parameters) 方法。下面的示例在网站集内创建一个新的博客网站。
var siteUrl = '/sites/MySiteCollection ';
function createWebSite() {
var blogDescription = 'A new Blog Web site.';
var blogLanguage = 1033;
var blogTitle = 'Blog Web Site';
var blogUrl = 'blogwebsite';
var blogPermissions = false;
var webTemplate = 'BLOG#0';
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
var webCreateInfo = new SP.WebCreationInformation();
webCreateInfo.set_description(blogDescription);
webCreateInfo.set_language(blogLanguage);
webCreateInfo.set_title(blogTitle);
webCreateInfo.set_url(blogUrl);
webCreateInfo.set_useSamePermissionsAsParentSite(blogPermissions);
webCreateInfo.set_webTemplate(webTemplate);
this.oNewWebsite = this.oWebsite.get_webs().add(webCreateInfo);
clientContext.load(this.oNewWebsite, 'ServerRelativeUrl', 'Created');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
alert('Title: ' + this.oWebsite.get_title() + ' Description: ' + this.oWebsite.get_description());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
上面的示例使用 LINQ 查询表达式返回 serverRelativeUrl 和 created 属性,除非您明确要求,否则不会显示这些属性的值。
备注
当您使用 LINQ 针对客户端对象模型创建查询时,需使用 LINQ to Objects 而不是 LINQ to SharePoint 提供程序,只有在对服务器对象模型编写代码时,才能使用 LINQ to SharePoint 提供程序。