2014-12-26 2 views
-1

Мне нужна ваша помощь. Я пробовал это, но не могу найти решение. При нажатии кнопки значок кликабель не запускался, чтобы удалить один из бесплатных дней. Работает другой клик. Вот мой код:Durandal нокаут клик событие

periods.js

define(function (require) { 
     var backend = require('backend'); 
     var ko = require('knockout'); 
     var app = require('durandal/app'); 

     return { 
      active_periods:ko.observableArray([]), 
      activate:function(){ 
       var that = this; 
       backend.getActivePeriods().then(function(results){ 
        that.active_periods(results); 
       }); 
      }, 
      editActivePeriod:function(period){ 
       period.viewUrl = 'views/editActivePeriod'; 
       app.showDialog(period); 
      }, 
      editFreeDays:function(){ 
       alert("hh"); 
      }, 
      deleteFreeDays:function(){ 
       alert("ha"); 
       return app.showMessage('Willst du wirklich diese freien Tag(e) löschen?', '', [ { text: "Ja", value: "Yes" }, { text: "Nein", value: "No" }]); 
      } 
     }; 
    }); 

periods.html

<section> 
<div class="row"> 
    <div class="col-md-6"> 
     <h3 class="center-block">aktive Perioden</h3> 
     <hr> 
     <button type="button" class="btn btn-success btn-lg btn-block"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> neue Periode erstellen</button> 
     <br> 
     <!-- ko foreach: active_periods --> 
     <div class="panel panel-primary"> 
      <div class="panel-heading"> 
       <h3 class="panel-title"> 
        <!--ko text: name--><!--/ko--> (<!--ko text: startDate--><!--/ko--> - <!--ko text: endDate--><!--/ko-->)<i class="fa fa-cog fa-lg pull-right" data-bind="click:$parent.editActivePeriod"></i> 
       </h3> 
      </div> 
      <div class="panel-body"> 
       <ul data-bind="foreach: freeDays"> 
        <li> 
        <!--ko text: name--><!--/ko--> 
        <i class="fa fa-times-circle fa-lg pull-right" data-bind="click:$parent.deleteFreeDays"></i> 
        </li> 
       </ul> 
      </div> 
     </div> 
     <!-- /ko --> 
     </div> 
    <div class="col-md-6"> 
     <h3>archivierte Perioden</h3> 
     <hr> 
    </div> 
</div> 
</section> 

Что я не так?

ответ

2

я бы не согласиться с Уэйном. Вместо этого вы должны использовать следующее: data-bind="click: $root.deleteFreeDays". При таком подходе ваш доступ к viewModel не будет структурно зависимым.

Это то, что $root для.

1

Поскольку freeDays является дочерним active_periods, который является потомком модели представления вам нужно, чтобы получить прародителя вместо родителя data-bind="click: $parents[1].deleteFreeDays"

Смежные вопросы