让我们考虑使用类似的淘汰视图模型:
var data = [{ id: 1, name: "John Doe" }, { id: 2, name: ""}, { id: 3, name: "Peter Parker"}];
var viewModel = {
items: ko.observableArray(data)
};
viewModel.showName = function (name) {
console.log(this);
return name && name.length > 0;
};
viewModel.removePerson = function () {
console.log(this);
};
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
有了这个视图:
<ul data-bind="foreach: items">
<li><span data-bind="text: id"></span>
<span data-bind="visible: $root.showName(name)">Yes! show the name</span>
<a href="#" data-bind="click: $root.removePerson">Remove</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到它:http://jsfiddle.net/SmW35/8/
在这种情况下,当有人点击"删除"链接,并且KO调用showName函数,函数内的对象"this"时,它是具有当前项的对象,例如,如果我单击项目2中的"remove" ,"this"是{id:2,name:""}但是,当KO绑定"visible"并调用showName函数时,"this"对象不包含当前项,并且你必须传递"命名为"函数(或者您可以使用$ data).
所以,我有两个问题:
我有以下情况:
1.-我想使用Azure AD保护Azure中的一个Web api项目(我不介意令牌,cookie,无论如何,只要它满足整个方案)
2.- asp.net MVC中的Azure网站,也由Azure AD保护。该网站必须使用SSO调用Web api控制器(在整个方案中我使用的是相同的Azure AD)
3.-一些JavaScript代码在SharePoint Online的页面中运行,还以任何安全方式调用Web api控制器(Office 365租户也使用相同的Azure AD)。如果您不了解SharePoint,那么可以说我有一个SPA项目,在这里我只能使用Javascript和html(无服务器端代码)。
遵循一些MS Azure AD示例和Vittorio Bertocci的一些博客之后,我可以使用OWIN和Oppen ID connect正常工作第1点和第2点。但是,似乎无法实现第3点。由于我位于SharePoint Online中的页面中,因此只能使用javascript,而不能使用任何服务器端代码。我想为当前用户获取一个有效的令牌,该令牌已经在SP中登录,并且请记住,SP使用与Web api网站相同的Azure AD。是否可以仅从客户端代码调用Azure AD并获取有效令牌?
我愿意接受任何可能的解决方案。我可以在Web api项目中做任何事情。如果您正在考虑使用带有appPart的SharePoint应用程序,并且appPart从服务器端代码调用Web api,则我同意这会起作用,但是此选项目前不可用:(
非常感谢。
sharepoint office365 asp.net-identity azure-active-directory asp.net-web-api2