2013-11-21 4 views
0

자습서에있는 것과 마찬가지로 추가, 제거 및 바인딩을 사용하여 표 템플릿을 만들려고합니다.녹아웃 변경 드롭 다운을 방지

이 템플릿 http://jsfiddle.net/mouseoctopus/Qy736/에는 각 드롭 다운이 고유 한 값을 갖도록 만드는 것이 좋습니다. 값을 반복하지 않으므로 변경 블록에 논리를 추가하려고합니다.

이벤트를 처리하기 위해 jquery를 사용하는 경우 변경 사항에 바인딩을 시도하고 값이 다른 드롭 다운에서 현재 선택되었는지 확인한 다음 기본값이 발생하는 경우이를 방지 할 수 있습니다.

녹아웃을 사용하면 이와 동일한 문제가 발생합니까?

내 이벤트가 실행 중이지만 기본값을 방지 할 수 없습니다.

self.changeType = function(data, event){ 
     return false; 
    }; 

라이브 예를 들어 바이올린 http://jsfiddle.net/mouseoctopus/Qy736/을 참조보기

<td><select data-bind="options: $root.PhoneTypes, value: name, optionsText:'name', 
      event: { change: $root.changeType}" ></select></td> 

HTML

아래

관련 코드는

슈퍼 newb가 < 2 녹아웃 난 며칠이 지나면 이해할 수 없을 것 같습니다. 이 페이지에서는 http://knockoutjs.com/documentation/value-binding.html이라는 속성에 changeBubble : false 속성을 추가하는 것에 대해 언급했지만 실제로는 도움이되지 않습니다.

Q :이

답변

1

JSFiddle

(나는이 행동에 지정 유효성 검사를 삽입 할 수 있도록) 나는/I 조건부 일어나는 선택의 변화를 방지 할 수있는 방법 어쨌든 모르겠어요 수는을 중지 당신이 원하는대로 행사. 이것은 이미이 될 수있는 유형으로 설정되는 새로운 항목의 문제가 해결되지 않는

function PhoneNumber(type, number, comment) { 
    var self = this; 

    self._type = type;  
    self.type = ko.observable(type); 
    self.number = number; 
    self.comment = comment; 
} 

function PhoneNumbersViewModel() { 
    var self = this; 

    self.subTitle = ko.observable("Call Me Maybe"); 

    self.PhoneTypes = [ 
     { name: "Fax" }, 
     { name: "Home" }, 
     { name: "Mobile" }, 
     { name: "Work" } 
    ];  

    self.phoneNumbers = ko.observableArray([ 
     new PhoneNumber(self.PhoneTypes[0], "500-555-5555", "Phoney") 
    ]); 

    self.addPhoneNumber = function() { 
     self.phoneNumbers.push(new PhoneNumber(self.PhoneTypes[0], "", "")); 
    } 

    self.removePhoneNumber = function(number) { 
     self.phoneNumbers.remove(number); 
    } 

    self.clearSubtitle = function(){ this.subTitle(""); } 

    self.changeType = function(data, event){ 
     if(self.phoneNumbers().some(function(number) { 
      return number != data && number.type().name == data.type().name; 
     })) { 
      data.type(this._type); 
     } else { 
      this._type = data.type(); 
     } 
    }; 
} 

: 사용자가 이전에 선택한 유형을 선택하려고 할 경우, 당신은 다시 변경 후 이전 값을 저장 할 수 있습니다 선택했습니다 ...하지만 그건 당신이 묻고있는 것이 아닙니다.

+0

순수한 용액. 감사합니다 – user1778606

+0

당신이 관심이 있는지 잘 모르겠지만, 내 문제에 대한 대체 솔루션을 생각해 냈습니다 - 드롭 다운에서 선택해서는 안되는 항목을 제거합니다. 조금 복잡해. http://jsfiddle.net/mouseoctopus/2552K/를 참조하십시오. – user1778606

관련 문제