2015-10-20 52 views
1

我在服务器端创建模型并使用它喜欢ViewModel进行挖空。 我的问题是绑定到选择的值对象{代码,名称}或任何想法如何做时,改变代码值也改名字,我需要选择文本和值将依赖观察到选择值和文本可以独立观察

我的模型C#

public class Model 
{ 
    public ClientInfo ClientInfo = new ClientInfo(); 
    public Address Address = new Address(); 
    public SearchInfo SearchInfo = new SearchInfo(); 
} 

public class ClientInfo 
{ 
    public string firstname = "Sunnatilla"; 
    public string lastname = "Axakalov";  
} 


public class Address 
{ 
    public List<CodeName> countries = new List<CodeName>(); 
    public CodeName country = new CodeName(); 
    public List<CodeName> cities = new List<CodeName>(); 
    public CodeName city = new CodeName(); 
} 

public class CodeName 
{ 
    public string code = "2"; 
    public string name = "Russia"; 

    public CodeName(){} 

    public CodeName(string code, string name) 
    { 
     this.code = code; 
     this.name = name; 
    } 
} 


public class SearchInfo 
{ 
    public bool NewClient = true; 
} 

ASPX页面

 <select id="address" data-bind="options: Address.countries, 
            optionsText: 'name', 
            optionsValue: 'code', 
            value: Address.country.code, 
            event: { change: Address.country.name = ko.utils.arrayFirst(Address.countries, function (country) { if (country.code === Address.country.code) return country.name }) }"></select> 

    <span data-bind="text: Address.country.code"></span> 
    <span data-bind="text: Address.country.name"></span> 

    <script> 

     $("#out").html('<%=this.model %>'); 

     var jsonModel = JSON.parse('<%=this.model %>'); 
     // jsonModel = {"ClientInfo":{"firstname":"Sunnatilla","lastname":"Axakalov"},"Address":{"countries":[{"code":"1","name":"Kazakhstan"},{"code":"2","name":"Russia"},{"code":"3","name":"China"}],"country":{"code":"2","name":"Russia"},"cities":[],"city":{"code":"2","name":"Russia"}},"SearchInfo":{"NewClient":true}} 


     function ViewModel() { 
      ko.mapping.fromJS(jsonModel, {}, this); // here I creatre my view model, all childs recursively observable 
     } 

     var viewModel = new ViewModel(); 

     ko.applyBindings(viewModel); 
    </script> 

或更改Address.country.code时也发生了变化Address.country.name

做出一些事件0

我需要同时更改配对键/值

请帮助任何想法。 Address.country`为`select`:

+0

试'值覆盖的observabe Address.country.name这是行不通的。 – Dandy

+0

@sunna试试这个http://jsfiddle.net/supercool/LkqTU/27321/ –

+0

@Dandy我试过了没有工作 – sunna

回答

0

也许是因为你当值改变

<select id="address" data-bind="options: Address.countries, 
           optionsText: 'name', 
           optionsValue: 'code', 
           value: Address.country.code, 
           event: { change: Address.country.name(ko.utils.arrayFirst(Address.countries, function (country) { if (country.code === Address.country.code) return country.name }) })"></select>