javascript - 当 Knockout observable 未定义或禁用 JS 时显示默认值

标签 javascript razor knockout.js

使用 Knockout.js,如果绑定(bind)到元素的可观察对象未定义,是否有办法显示元素的原始内容?

<p data-bind="text: message">Show this text if message is undefined.</p>

<script>
    function ViewModel() {
        var self = this;        
        self.message = ko.observable();    
    };

    ko.applyBindings(new ViewModel());
</script>

我知道有使用 visible 的解决方法, hiddenif但我觉得那些太乱了;我不希望同一个元素被写出两次,每个条件一次。

此外,我不想使用任何类型的默认可观察值。走那条路,如果 JS 被禁用,那么什么也不会显示。爬虫也一样:他们只会看到一个空的 <p>。标签。

总而言之,我想说“如果存在则显示这条消息,否则就不要管元素及其文本。”

这背后的原因是我想首先使用 Razor 填充我的元素。

<p data-bind="text: message">@Model.Message</p>

然后,在浏览器中,如果启用了 JS,我可以随心所欲地使用它。但是,如果没有 JS 或者用户是爬虫,他们至少会看到服务器端通过 Razor 提供的默认值。

最佳答案

如果 message 未定义,您可以简单地使用 || 运算符来显示默认消息。加上默认文本作为内容:

<p data-bind="text: message() || '@Model.Message' ">@Model.Message</p>

如果 javascript 被禁用,绑定(bind)将被忽略,您将显示内容。

JSFiddle

关于javascript - 当 Knockout observable 未定义或禁用 JS 时显示默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043896/

相关文章:

javascript - 在每次循环迭代中更改字符串

javascript - 如何使用 JSON 数据嵌套 React 组件

c# - MVC3 预加载 View 中的许多图像

javascript - 将正则表达式绑定(bind)为 knockoutjs 中的可观察对象

javascript - 获取宽度的绑定(bind)处理程序

javascript - Google map API - 使用 Infowindow 控制位置

javascript - 通过组合 pdf.js 和 pdf.worker.js 创建 pdf.js 的离线版本

asp.net-core - Razor组件和Blazor的区别

c# - SQL:按日期分组

javascript - Knockoutjs 在尝试创建一系列无序列表时抛出异常