【问题标题】:creating a toggle button to change page views创建一个切换按钮来更改页面视图
【发布时间】:2013-04-10 00:30:46
【问题描述】:

我正在使用淘汰赛 js 来显示我的数据,并且我还使用它来绑定模板。我有一个以两种不同方式显示相同信息的页面:一种是网格视图,另一种是列表视图。目前我在页面加载时显示了两个视图。我想创建两个按钮,一个用于网格,一个用于列表。我不知道如何使用 Knockout js 来解决它,任何提示或帮助表示赞赏。

查看页面

<div data-bind="template: {name:'grid-template'}, visible: !showList()"></div>
<div data-bind="template: {name:'list-template'}, visible: showList()"></div>

<input type="button" value="Toggle" data-bind="click: toggleView"/>

<script style="float:left"  type="text/html" id ="grid-template">
    <section " style="width:100%; float:left">
    <section id="users" data-bind="foreach: Users">
        <div id="nameImage">
            <figure id="content">
                <img width="158" height="158" alt="Gravatar" data-bind="attr:{src: GravatarUrl}"/>
                <figcaption>
                    <a title="Email" id="emailIcon" class="icon-envelope icon-white" data-bind="attr:{'href':'mailto:' + Email()}"></a>
                    <a title="Profile" id="profileIcon" class="icon-user icon-white"></a>
                </figcaption>
            </figure>
            <p data-bind="text:Name"></p>
            </div>
        </section>
    </section>
</script>

<script style="float:left" type="text/html" id="list-template">
        <div data-bind="foreach: Users">
            <div style="width:60%; float:left; margin:10px; height:58px">
                <img style="float:left; margin-right:5px" width="58" height="58" alt="Gravatar" data-bind="attr:{src: GravatarUrl}"/>
                <p style="height:58px; float:left; vertical-align:central" data-bind="text:Name"></p>
                <a style="float:right"  title="Profile"  class="icon-user icon-black"></a>
                <a style="float:right"  title="Email" class="icon-envelope icon-black" data-bind="attr:{'href':'mailto:' + Email()}"></a>
            </div>
        </div>
</script>

@section scripts{
    @Scripts.Render("~/bundles/user" + ViewBag.Layout.AppVersionForUrls)

    <script type="text/javascript">
        (function ($) {
            $.views.User.GetUser('@url');
        })(jQuery);
    </script>
    }

淘汰赛 JS

$.views.User.UserViewModel = function (data) {
        var self = this;
        self.Name = ko.observable(data.Name);
        self.Email = ko.observable(data.Email);
        self.ContentRole = ko.observable(data.ContentRole);
        self.MD5Email = ko.observable(data.MD5Email);
        self.GravatarUrl = ko.computed(function () {
           return 'http://www.gravatar.com/avatar/' + self.MD5Email() + '?s=300&d=identicon&r=G';
        });
        self.showList = ko.observable(true);
        self.toggleView = function () {
        self.showList(!self.showList());
        }
    };

【问题讨论】:

    标签: javascript asp.net-mvc knockout.js knockout-templating


    【解决方案1】:

    如果我理解正确,您可以将每个 div 的可见属性绑定到每次按下按钮时翻转的布尔值。

    HTML:

    <input type="button" value="Toggle" data-bind="click: toggleView"/>
    
    <div data-bind="visible: showGrid()">Grid</div>
    <div data-bind="visible: !showGrid()">List</div>
    

    查看模型:

    var ViewModel = function() {
        var self = this;
    
        self.showGrid = ko.observable(true);
        self.toggleView = function() {
            self.showGrid(!self.showGrid());
        }
    }
    
    var vm = new ViewModel();
    ko.applyBindings(vm);
    

    这是jsFiddle

    【讨论】:

    • 我不确定这是否可以添加到我已经拥有的东西上。但我将前两个 div 更改为:&lt;div data-bind="template: {name:'grid-template'}, visible: !showList()"&gt;&lt;/div&gt; &lt;div data-bind="template: {name:'list-template'}, visible: showList()"&gt;&lt;/div&gt; 我只得到切换按钮,点击后什么也没有发生
    • 您是否在视图模型上创建了一个可观察的“showList”?
    • 是的,我刚刚用你的建议更新了我的帖子。由于我是淘汰赛 js 的新手,请随时指出任何错误或遗漏
    • 您显示的 UserViewModel 似乎是 inside foreach(即单个用户)使用的视图模型。 showList observable(及其关联的 toggleView 函数)需要位于包含“Users”集合的视图模型(通常是“根”视图模型)上。没有看到完整的 viewmodel + HTML 很难了解更多。
    • 用于淘汰赛的视图模型我将它放在一个单独的 js 文件中,我在视图页面中调用该文件(刚刚发布在@section scripts... 上方)有没有办法将切换的语法更改为放置在视图页面中没有敲除语法?
    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多