2013-07-25 4 views
0

Когда я нажимаю на якорь, я хочу, чтобы он сохранил объект (который отлично работает), и я также хочу сделать кнопку невидимой. Мне нужно сделать свойство «InQuestionBank()» истинным, когда я нажимаю на кнопку. Если я изменил привязку данных на якоре до:Knockout JS Множественное связывание кликов

<a data-bind="click: InQuestionBank, visible: !InQuestionBank()" href="#" class="saveBank btn btn-info title" data-toggle="tooltip" data-original-title="Insert into question bank"><i class="icon-plus-sign"></i></a> 

Кнопка исчезнет. Возможно ли иметь несколько привязок кликов или есть лучший способ сделать это?

Вот что я в настоящее время для моего якоря, на мой взгляд:

<a data-bind="click: $parent.SaveQuestionBank, visible: !InQuestionBank()" href="#" class="saveBank btn btn-info title" data-toggle="tooltip" data-original-title="Insert into question bank"><i class="icon-plus-sign"></i></a> 

Мой Нокаут код:

var Question = function (data) { 
    var self = this; 
    self.Type = ko.observable(data.Type); 
    self.Question = ko.observable(data.Question); 
    self.Options = ko.observable(data.Options); 
    self.InQuestionBank = ko.observable(data.InQuestionBank); 
} 

var ViewModel = function (initial) { 
    var self = this; 
    self.Questions = ko.observableArray([]); 

    self.SaveQuestionBank = function (question) { 
     $.ajax({ 
      url: initial.SaveQuestionBankUrl, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: ko.toJSON({ question: question }), 
      success: function (data) { 
       if (data.status == "OK") { 
        $.msgGrowl({ 
         type: 'success', 
         title: 'Question Bank', 
         text: 'Successfully saved question in question bank.' 
        }); 
       } 
       else if (data.status == "ERROR") { 
        $.msgGrowl({ 
         type: 'error', 
         title: 'Question Bank', 
         text: 'An error occurred - please try again.' 
        }); 
       } 

       self.OverallQuestionsBank.push(new OverallQuestionBank({ 
        Question: question.Question(), 
        Type: question.Type(), 
        Options: question.Options() 
       })); 
      } 
     }); 
    } 

    for (var i = 0; i < initial.questions.length; i++) { 
     self.Questions.push(new Question(initial.questions[i], initial.ParentID)); 
    } 
} 
+0

Почему бы не просто изменить флаг «InQuestionBank» в то время как вы толкаете его на сервер или в OverallQuestionsBank? –

+0

Внутри функции SaveQuestionBank я пытался «self.InQuestionBank = true;» но это не сработало. – Andrew

+0

Проверьте мой ответ, это сработает для вас, и я объясню, почему в секунду –

ответ

1

Просто изменить флаг вопросов «InQuestionBank», как показано ниже

var Question = function (data) { 
    var self = this; 
    self.Type = ko.observable(data.Type); 
    self.Question = ko.observable(data.Question); 
    self.Options = ko.observable(data.Options); 
    self.InQuestionBank = ko.observable(data.InQuestionBank); 
} 

var ViewModel = function (initial) { 
    var self = this; 
    self.Questions = ko.observableArray([]); 

    self.SaveQuestionBank = function (question) { 

     // Change the question's flag 
     question.InQuestionBank(true); 

     $.ajax({ 
      url: initial.SaveQuestionBankUrl, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: ko.toJSON({ question: question }), 
      success: function (data) { 
       self.OverallQuestionsBank.push(new OverallQuestionBank({ 
        Question: question.Question(), 
        Type: question.Type(), 
        Options: question.Options() 
       })); 
      } 
     }); 
    } 
} 

Помните, что когда вы меняете значение наблюдаемого свойства (например, InQuestionBank), вы должны использовать функцию «setter» для новичков, чтобы установить новое значение.

В этом случае было бы question.InQuestionBank (истинное)

+0

Я забыл о функции setter для установки нового значения. Я полностью передумал. – Andrew

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