【问题标题】:Using javascript variable or function inside caml query on sharepoint list view page with sharepoint designer使用共享点设计器在共享点列表视图页面上的 caml 查询中使用 javascript 变量或函数
【发布时间】:2016-12-02 14:01:27
【问题描述】:

我正在尝试将自定义 JavaScript 变量或函数放入共享点的列表视图页面,在 caml 查询中,使用共享点设计器

例如:

我正在打开要修改的列表视图。比我添加将在页面加载时执行的自定义 javascript 代码,我想使用从这个函数返回的值,在 caml 查询中:

<View Name="{SOMENAME}" MobileView="TRUE" Type="HTML" DisplayName="MyGroups" Url="SOMEURL" Level="1" BaseViewID="2" ContentTypeID="0x" ImageUrl="/_layouts/15/images/issuelst.png?rev=23" >
            <Query>
                <OrderBy>
                    <FieldRef Name="ID" Ascending="FALSE"/>
                </OrderBy>
                <Where>
                    <Eq>
                        <FieldRef Name="Group_x0020_Name"/>
                        <Value Type="Text">BPA</Value>
                    </Eq>
                </Where>
            </Query>
            <ViewFields>
                <FieldRef Name="LinkTitle"/>
            </ViewFields>
            <RowLimit Paged="TRUE">10</RowLimit>
            <Aggregations Value="Off"/>
            <JSLink>clienttemplates.js</JSLink>
            <XslLink Default="TRUE">main.xsl</XslLink>
            <Toolbar Type="Standard"/>
        </View>

所以我想把变量或函数放在这里:

<FieldRef Name="Group_x0020_Name"/>
<Value Type="Text">HERE VARIABLE OR JAVASCRIPT</Value>

有可能吗?

【问题讨论】:

  • 如果可能,请至少回答
  • 在 listVIew 的页面中(在站点,而不是 SPD)--> 编辑页面--> 添加脚本的 webpart 并在加载时粘贴您的代码等。
  • 是的,我可以在那里粘贴代码,但如何将所需的变量传递给列表视图?
  • 我想根据当前登录的用户组获得列表视图,并且由于我想从自定义列表中获取当前登录用户的组名,而不是从权限组中,我不知道如何将 page.onload 期间执行的函数的返回值传递给列表视图。我发现的唯一解决方案是使用来自 Web 部件的 HTML,将此表单连接到我的列表视图,然后 onload 将值作为参数传递给表单并触发回发功能。但是由于回发功能会触发页面重新加载,因此它陷入了无限循环(页面加载>表单提交>页面加载>表单提交..
  • 或者如何在不重新加载页面的情况下使用javascript动态传递参数到列表视图?

标签: javascript listview sharepoint-2013 sharepoint-designer caml


【解决方案1】:

here 是很棒的文章。但是我现在正在修补的是,无法从视图中正确删除额外的项目。例如:

(function() {
function listPreRender(renderCtx) {
    var rows = renderCtx.ListData.Row;
    var i = rows.length;
    while (i--) {
        var del = rows[i]['Group_x0020_Name'] === 'BPA';
        if (del) {
            rows.splice(rows[i], 1);
        }
    }
    renderCtx.ListData.LastRow = rows.length;
}
function registerListRenderer() {
    var context = {};
    context.Templates = {};
    context.OnPreRender = listPreRender;
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
}
ExecuteOrDelayUntilScriptLoaded(registerListRenderer, 'clienttemplates.js');
})();

有时会从视图中删除项目有时不会。尽管视图中没有显示任何项目,但列过滤器仍然可见。这是图片link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-12-27
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多