首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Knockout前端循环中编写HTML代码(通过Razor调用)

在Knockout前端循环中编写HTML代码(通过Razor调用)
EN

Stack Overflow用户
提问于 2019-08-27 14:20:52
回答 1查看 68关注 0票数 0

我现在的情况是:

代码语言:javascript
复制
<fieldset name="sortSearch">
    @Html.CreateSortingControl("views.restricted.widgets.alertdetailwidget.sorting", "searchCriteria.Sorting", "changeSortingDirection", "changeSortingField", GetValueList(SortingValueProvider.ValueProviderId))
</fieldset>

实际上,我调用了一些CS代码,这些代码将创建带有下拉列表和绑定的标记。例如,当在这个下拉列表中选择一个值时,将调用函数changeSortingField。一切正常运转。

问题是,我想将这个标记封装在一个依赖于可观察到的Knockout foreach循环中。就像这样:

代码语言:javascript
复制
<!-- ko foreach: {data: FieldSortings, as: 'sortings' }-->
    <fieldset name="sortSearch">
        @Html.CreateSortingControl("views.restricted.widgets.alertdetailwidget.sorting", "searchCriteria.Sorting", "changeSortingDirection", "changeSortingField", GetValueList(SortingValueProvider.ValueProviderId))
    </fieldset>
<!-- /ko -->

这意味着当FieldSortings增加时,应该会出现新的标记,而且它确实会出现。问题是,根据这种逻辑,我的函数不再被调用,例如当我从下拉列表中选择一个值时,绑定就不再工作了。感觉上标记只计算了一次(我认为)。我应该用某种特殊的构图来称呼Razor函数吗?提前感谢!

编辑:由剃刀返回的标记是:

代码语言:javascript
复制
 <div class="input-group custom-sort">
<section data-bind="validationElement: searchCriteria.Sorting.Field">
    <label class="select">
        <select data-i18n="[aria-label]accessibility.select.value" class="input-xs select-Sorting-Field" data-bind="value: searchCriteria.Sorting.Field,event: {change: changeSortingField}">
            <option value="" css="searchcriteria-sorting-field-">&lt;Select Order by&gt;</option>
            <option value="DetectionDate" data-default="true" css="searchcriteria-sorting-field-DetectionDate">Detection date</option>
            <option value="Impact" css="searchcriteria-sorting-field-Impact">Impact</option>
            <option value="Score" css="searchcriteria-sorting-field-Score">Score</option>
        </select>
        <strong class="tooltip tooltip-top-right">
            <i class="fa  txt-color-teal"></i>
            <span data-i18n="views.restricted.widgets.alertdetailwidget.sorting"></span>
        </strong>
    </label>
    <div class="note note-error" style="display: none;" data-bind="validationMessage: searchCriteria.Sorting.Field"></div>
</section>
<label class="input-group-addon" for="sorting-control" data-bind="click: changeSortingDirection">
    <span class="sr-only">Change the sorting direction</span>
    <input type="checkbox" name="sorting-control" id="sorting-control" data-bind="checked: searchCriteria.Sorting.IsDescending">
    <i></i>
</label>

FieldSortings是一个可观察的数组,定义为:

代码语言:javascript
复制
 self.FieldSortings = ko.observableArray([]);
EN

回答 1

Stack Overflow用户

发布于 2019-08-28 09:35:51

发现问题了。在Knockout foreach循环中,您需要使用$parent引用外部变量和函数。由于这个原因,它无法使绑定必须工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57676762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档