为什么我的基因剔除视图模型用不同的值初始化?

乔纳森·特维特(Jonathan Twite)

我正在编写一个基本的基因敲除(knockout.js)网页,以学习如何使用它。视图模型中的值设置为保存某人喜欢的运动,而html的其他部分会对所选值做出反应。我有以下ViewModel:

function ViewModel() {
    var self = this;

    self.firstName = ko.observable('Andy');
    self.lastName = ko.observable('Blowers');

    self.fullName = ko.computed(function () { return self.firstName() + " " + self.lastName(); });

    self.setFavourite = function (fav) { self.Favourite(fav); };

    self.Favourite = ko.observable("Football");
};

// Activate knockout.js
var vm = new ViewModel();
ko.applyBindings(vm);

和以下html:

<div>
    <h1>Welcome <span data-bind="text: fullName"></span></h1>
</div>
<div>
    <div class="form-group">
        <label class="control-label">First Name</label>
        <input class="form-control" type="text" id="txtFirstName" data-bind="value: firstName" />
    </div>
    <div class="form-group">
        <label class="control-label">Last Name</label>
        <input class="form-control" type="text" id="txtLastName" data-bind="value: lastName" />
    </div>
</div>

<div>
    <div class="form-group">
        <ul class="nav nav-btns">
            <li role="presentation" data-bind="css: { active: Favourite() == 'Football' }">
                <a id="btnFootball" data-bind="click: setFavourite('Football')">Football</a>
            </li>
            <li role="presentation" data-bind="css: { active: Favourite() == 'Rugby' }">
                <a id="btnRugby" data-bind="click: setFavourite('Rugby')">Rugby</a>
            </li>
            <li role="presentation" data-bind="css: { active: Favourite() == 'Cricket' }">
                <a id="btnCricket" data-bind="click: setFavourite('Cricket')">Cricket</a>
            </li>
        </ul>
    </div>
</div>

<div class="panel-group">
    <div class="panel panel-default" data-bind="visible: Favourite()=='Football'">
        <div class="panel-heading">
            <h3 class="panel-title">Football</h3>
        </div>
        <div class="panel-body">
            <p>I prefer football</p>
        </div>
    </div>
    <div class="panel panel-default" data-bind="visible: Favourite()=='Rugby'">
        <div class="panel-heading">
            <h3 class="panel-title">Rugby</h3>
        </div>
        <div class="panel-body">
            <p>I prefer rugby</p>
        </div>
    </div>
    <div class="panel panel-default" data-bind="visible: Favourite()=='Cricket'">
        <div class="panel-heading">
            <h3 class="panel-title">Cricket</h3>
        </div>
        <div class="panel-body">
            <p>I prefer cricket</p>
        </div>
    </div>
</div>

即使将“收藏夹”设置为初始化为“足球”,当页面启动时,也会选择“板球”,而不是“足球”。关于为什么以及如何设置默认选定值的任何想法?

小提琴:http : //jsfiddle.net/4jb43sr9/

阿尼什·帕特尔(Anish Patel)

这是因为您正在setFavourite单击绑定中调用该函数

所以,setFavourite实际上是被称为与你在淘汰赛时,你的绑定视图模型到视图中的每个列表项中指定的参数。因为'setFavourite('Cricket')'是视图中最后一个出现的函数,所以它也是最后一个被调用的函数,这就是选择cricket的原因。

您在这里有两个选择:

选项1

将这些函数调用包装在您的单击绑定中的匿名函数中:

<ul class="nav nav-btns">
   <li role="presentation" data-bind="css: { active: Favourite() == 'Football' }">
      <a id="btnFootball" data-bind="click: function(){ setFavourite('Football') }">Football</a>
   </li>
   <li role="presentation" data-bind="css: { active: Favourite() == 'Rugby' }">
      <a id="btnRugby" data-bind="click: function(){ setFavourite('Rugby') }">Rugby</a>
   </li>
   <li role="presentation" data-bind="css: { active: Favourite() == 'Cricket' }">
      <a id="btnCricket" data-bind="click: function(){ setFavourite('Cricket')}">Cricket</a>
   </li>
</ul>

这是您使用选项1更新小提琴

或者

选项2

不更改视图并从中返回一个函数setFavourite

   self.setFavourite = function (fav) {
        return function () {
            self.Favourite(fav);
        }
    };

小提琴更新了选项2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么对scrollr.js使用不同的初始化语法

来自分类Dev

用不同的值初始化const容器的正确方法是什么?

来自分类Dev

用不同的指定值初始化新的c ++数组

来自分类Dev

我应该总是初始化视图模型对象吗?

来自分类Dev

我应该总是初始化视图模型对象吗?

来自分类Dev

骨干视图为什么我不能在初始化中触发UI事件?

来自分类Dev

为什么使用不同类型的会话会影响变量是否在 tensorflow 中初始化?

来自分类Dev

为什么在更新模型时重新初始化Controller?

来自分类Dev

为什么在更新模型时重新初始化Controller?

来自分类Dev

为什么根据我初始化值的方式将值强制转换为IEnumerable <T>会有所不同?

来自分类Dev

为什么@EnvironmentObject强制视图重新初始化?

来自分类Dev

为什么我的新BitArray用错误的值初始化?

来自分类Dev

为什么我的新BitArray用错误的值初始化?

来自分类Dev

为什么在用户为其分配值之前,我需要初始化该变量?

来自分类Dev

Tensorflow 的占位符初始化与 tensorflow 的常量初始化不同。为什么?

来自分类Dev

使用基础模型的值初始化从基础模型继承的视图模型

来自分类Dev

在单个语句中用不同的值初始化不同的变量

来自分类Dev

为什么我不能初始化Map <int,String>?

来自分类Dev

为什么我不能像这样初始化数组?

来自分类Dev

为什么我无法在jQuery中初始化变量?

来自分类Dev

为什么我收到“未初始化的变量”错误

来自分类Dev

为什么我无法初始化COM库?

来自分类Dev

为什么我的写方法没有初始化?

来自分类Dev

为什么我无法在jQuery中初始化变量?

来自分类Dev

为什么我的变量没有初始化?

来自分类Dev

为什么我们要初始化 webelement?

来自分类Dev

为什么值初始化如此命名?

来自分类Dev

为什么输出不显示初始化值-1?

来自分类Dev

带有映射插件的基因剔除视图模型

Related 相关文章

  1. 1

    为什么对scrollr.js使用不同的初始化语法

  2. 2

    用不同的值初始化const容器的正确方法是什么?

  3. 3

    用不同的指定值初始化新的c ++数组

  4. 4

    我应该总是初始化视图模型对象吗?

  5. 5

    我应该总是初始化视图模型对象吗?

  6. 6

    骨干视图为什么我不能在初始化中触发UI事件?

  7. 7

    为什么使用不同类型的会话会影响变量是否在 tensorflow 中初始化?

  8. 8

    为什么在更新模型时重新初始化Controller?

  9. 9

    为什么在更新模型时重新初始化Controller?

  10. 10

    为什么根据我初始化值的方式将值强制转换为IEnumerable <T>会有所不同?

  11. 11

    为什么@EnvironmentObject强制视图重新初始化?

  12. 12

    为什么我的新BitArray用错误的值初始化?

  13. 13

    为什么我的新BitArray用错误的值初始化?

  14. 14

    为什么在用户为其分配值之前,我需要初始化该变量?

  15. 15

    Tensorflow 的占位符初始化与 tensorflow 的常量初始化不同。为什么?

  16. 16

    使用基础模型的值初始化从基础模型继承的视图模型

  17. 17

    在单个语句中用不同的值初始化不同的变量

  18. 18

    为什么我不能初始化Map <int,String>?

  19. 19

    为什么我不能像这样初始化数组?

  20. 20

    为什么我无法在jQuery中初始化变量?

  21. 21

    为什么我收到“未初始化的变量”错误

  22. 22

    为什么我无法初始化COM库?

  23. 23

    为什么我的写方法没有初始化?

  24. 24

    为什么我无法在jQuery中初始化变量?

  25. 25

    为什么我的变量没有初始化?

  26. 26

    为什么我们要初始化 webelement?

  27. 27

    为什么值初始化如此命名?

  28. 28

    为什么输出不显示初始化值-1?

  29. 29

    带有映射插件的基因剔除视图模型

热门标签

归档