Knockout.js 模板未更新 dependentObservable 上的 UI 绑定

2024-01-23

该应用程序是在 vs2010 中使用 ASP.NET MVC 3 编写的。

我有一个淘汰赛模板,它使用 a 更新一些 css 和可见绑定 依赖的可观察的。

仅当我绑定时才会出现此问题 选择元素的值 间隔ID。如果这没有被绑定 UI 按预期更新。

我已经从主应用程序中删除了代码,并创建了一个示例页面,该页面使用标准标记和模板执行相同的绑定。

依赖的Observable 称为HasChanged。

 <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="../../Scripts/jquery.tmpl.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-1.2.0.js" type="text/javascript"></script>

<div data-bind="template: { name: 'intervalTemplate', for:viewModel }">
</div>
<h2>
    Not Template</h2>
<div data-bind="style: { color: HasChanged() ? 'red' : 'black' }">
    IntervalID: <span data-bind="text: IntervalID"></span>
    <br />
    Start:
    <input type="text" data-bind="value: Start">
    <br />
    End:
    <input type="text" data-bind="value: End">
    <br />
    Interval Type:
    <select data-bind="value: IntervalTypeID">
        <option value="1">Shift</option>
        <option value="2">Break (Paid)</option>
        <option value="3">Break (Unpaid)</option>
    </select><br />
    HasChanged: <span data-bind="text: HasChanged"></span>
</div>

<script id="intervalTemplate" type="text/html">
    <div data-bind="style: { color: HasChanged() ? 'red' : 'black' }">
    <h2>Template</h2>
IntervalID: <span data-bind="text: IntervalID"></span>
<br />
Start:
<input type="text" data-bind="value: Start">
<br />
End:
<input type="text" data-bind="value: End">
<br />
Interval Type:
<select data-bind="value: IntervalTypeID">
    <option value="1">Shift</option>
    <option value="2">Break (Paid)</option>
    <option value="3">Break (Unpaid)</option>
</select><br />
HasChanged: <span data-bind="text: HasChanged"></span>
</div>
</script>

<script type="text/javascript">
    function IntervalModel(data) {
        var _this = this;

        _this.IntervalID = ko.observable(data.IntervalID);
        _this.Start = ko.observable(data.Start);
        _this.End = ko.observable(data.End);
        _this.IntervalTypeID = ko.observable(data.IntervalTypeID);

        _this.OriginalStart = ko.observable(data.Start);
        _this.OriginalEnd = ko.observable(data.End);
        _this.OriginalIntervalTypeID = ko.observable(data.IntervalTypeID);


        _this.HasChanged = ko.dependentObservable(function () {
            return !(_this.OriginalStart() == _this.Start() &
                _this.OriginalEnd() == _this.End() &
                _this.OriginalIntervalTypeID() == _this.IntervalTypeID());
        });

    }

    var viewModel;

    $(function () {

        var viewModel = {};

        viewModel = new IntervalModel({ IntervalID: 1, Start: "09:00", End: "10:00", IntervalTypeID: 2 });
        ko.applyBindings(viewModel);

    });

</script>

任何帮助将不胜感激...我需要使用模板,因为我有很多需要显示的间隔。

Thanks!


github 上记录了一个关于此问题的问题:https://github.com/SteveSanderson/knockout/issues/133 https://github.com/SteveSanderson/knockout/issues/133

问题集中在使用数字作为选择选项的值。当选择元素使用value绑定时,它会使用元素的实际值进行更新,该元素始终是字符串。因此,如果您的可观察值是 2,则在设置绑定时它会设置为“2”。此更改似乎会导致使用在 select 元素之前在模板中设置的可观察值的任何绑定出现问题。

因此,在这个问题可能得到解决之前,您可以通过将 IntervalTypeID 作为字符串 (“2”) 传递来使其工作。将数字转换为字符串的一个简单方法是yourvalue + ''.

这里它正在工作:http://jsfiddle.net/rniemeyer/uDSFa/ http://jsfiddle.net/rniemeyer/uDSFa/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Knockout.js 模板未更新 dependentObservable 上的 UI 绑定 的相关文章

随机推荐

  • jQuery 和 django-rest-framework-bulk:发送列表

    我需要使用 django rest Framework bulk mixins 将对象列表发送到视图 class APIPicksView mixins ListModelMixin bulk mixins BulkCreateModelM
  • 如何在散景中显示补丁的图例项

    在以下设置中 我根据基本示例创建面积图 如何自动甚至以编程方式获取输入的图例 现在我只得到带有一个项目 a 和第一种颜色的图例 from bokeh plotting import patches x2 for a in areas lis
  • 四舍五入两位小数

    double x 9 29 double y 8 69 double diff floor x y 100 0 5 100 0 这给了我 diff 为 0 6 但我需要它为 0 60 两位小数 有人可以帮我解决这个问题吗 double 的值
  • .htaccess 将所有子文件夹内容(带或不带结尾斜杠)重定向到同一子文件夹

    我想重定向以下网址 gallery image 1 gallery image 1 gallery image 2 gallery image 2 to gallery 但这比乍看起来要困难 这是来自 htaccess RewriteEng
  • Django,按日期范围内指定的月份和年份进行过滤

    我有以下型号 class Destination Deal models Model name models CharField Nombre max length 200 class Departure Date models Model
  • Javascript 事件似乎没有添加到动态生成的文本框中

    我为 JavaScript 中动态添加的文本框添加了 onkeyup javascript 但它似乎不起作用 var cell4 row insertCell 3 cell4 setAttribute align center var e3
  • JPEG 解压缩在 Windows 体系结构中不一致

    我正在使用不同版本的 Windows 的一堆计算机上测试 JPEG 解压缩 所有这些计算机都安装了 NET 4 我正在针对 NET 2 和 任何 CPU 平台目标进行编译 以下代码在不同的系统上产生不同的输出 Bitmap bmp Bitm
  • 优化“rootn(x, n)”的低精度近似

    rootn float t x int t n is a function that computes the n th root x1 n and is supported by some programming languages su
  • Windows 批处理:从文本文件设置变量

    我目前正在寻找一种通过 txt 文档中的链接在 Windows 批处理文件中设置变量的方法 例如 如果文本文件读取为 http website1 com http website2 com http website3 com 我希望可以将它
  • PHP-EWS“Soap 客户端返回状态 404”

    所以 我正在使用php ews http jamesarmes com php ews库连接到我的 Microsoft Office 365 Exchange 电子邮件帐户以阅读电子邮件 我已成功连接到它 并设法检索我需要的电子邮件列表 现
  • 可以拆分PHP配置文件php.ini吗?

    任何使用 php 的人都知道 php ini 是一个大文件 当您需要更改 ssh 时可能会让人头疼 例如我可以使用更改 nginx confinclude指令将启用站点的目录下的所有文件加载到主 nginx conf 中 所以我的问题很简单
  • 如何计算字符串的 CRC32

    如何计算 NET 中字符串的 CRC32 循环冗余校验和 这家伙似乎已经给你答案了 https damieng com blog 2006 08 08 calculate crc32 in c and net https damieng c
  • MVVM 中的数据绑定 ObservableCollection

    我有一个带有数据模板的 ListView 其中包含电影列表 它被数据绑定到 ObservableCollection 但每当我编辑 Movie Name 时 即使在我的 PropertyChangedEventHandler 中使用 Nam
  • 在 SSLContext 中使用硬件支持的密钥

    我想在 Android 上使用硬件支持的密钥进行客户端双向 TLS 钥匙应该通过生物识别技术解锁 我找到了如何在 Android 上生成硬件支持的密钥对 KeyPairGenerator keyGenerator KeyPairGenera
  • 如何调整 meSpeak.js 以获得更好的声音?

    我是新来的meSpeak js http www masswerk at mespeak 我不能接受他们在演示中的默认声音 我尝试使用他们拥有的选项 但这并没有多大区别 我想知道如何调整它 以使声音接近 Siri 的水平 而不是像他们的演示
  • 如何在vue中创建警报确认框

    我想在删除文件之前显示一个对话框 我如何用vue做到这一点 这是我尝试的 我的删除文件按钮 a href Delete a 这是我的删除方法 DeleteUser id index axios delete api artist id th
  • 无法实例化片段确保类名存在

    android app Fragment InstantiationException 无法实例化 片段 确保类名存在 是公共的并且有一个空 构造函数是公共的 我意识到有很多关于同一错误的问题 但到目前为止没有一个对我有帮助 我正在从一本书
  • 将 Mercurial 与 Cygwin 一起使用?

    我们一直在尝试将 Mercurial 与 Cygwin 在 Windows 上 一起使用 但遇到错误 因为 Cygwin 使用正斜杠 而 Mercurial 似乎需要反斜杠 有解决方法吗 问题示例 hg status M src myfil
  • 自动运行可移动驱动器

    自动运行在 Windows 中被禁用 我正在寻找替代方案 我得到了这个 AutoIt 脚本 DBT DEVICEARRIVAL 0x00008000 WM DEVICECHANGE 0x0219 GUICreate GUIRegisterM
  • Knockout.js 模板未更新 dependentObservable 上的 UI 绑定

    该应用程序是在 vs2010 中使用 ASP NET MVC 3 编写的 我有一个淘汰赛模板 它使用 a 更新一些 css 和可见绑定 依赖的可观察的 仅当我绑定时才会出现此问题 选择元素的值 间隔ID 如果这没有被绑定 UI 按预期更新