2014-11-14 65 views
0

如何修改responseText: self.registrationmark以便self.registrationmark的值可以計算爲變量而不是字符串?將observable的值作爲變量而不是字符串進行評估

例如如果self.registrationmarkDE63BEY然後responseText:應該評估的變量DE63BEY

HTML

<input type="text" id="registrationmark" data-bind="value: registrationmark"> 

的Javascript

function ViewModel() { 
    var self = this; 

    self.registrationmark = ko.observable(); 

    var DE63BEY = { ... } 
    var SL64KWX = { ... } 
    var CU56OHG = { ... } 
    var VN10YMY = { ... } 
    var Y926MNB = { ... } 

    $.mockjax({ 
     url: '/test', 
     dataType: 'json', 
     responseTime: 2500, 
     responseText: self.registrationmark 
    }); 

    ... 

} 

ko.applyBindings(new ViewModel()); 
+0

不要忘記接受答案 – 2014-11-16 01:02:09

回答

2

剛剛讀您的評論以上馬修,我覺得你首先需要設置的變量此範圍/自:

self.DE63BEY = { ... } 
self.SL64KWX = { ... } 
self.CU56OHG = { ... } 
self.VN10YMY = { ... } 
self.Y926MNB = { ... } 

那你肯定是後:

responseText: self[self.registrationmark()] 

即致電

self.registrationmark() 

得到像「DE63BEY」的字符串,然後得到相應的變量,你需要看看它的自我中,因爲如果y OU在做:

self["DE63BEY"] 

這當然是相當於到

self.DE63BEY 

這是你後的變量!

0

嘗試以下操作:

$.mockjax({ 
    url: '/test', 
    dataType: 'json', 
    responseTime: 2500, 
    responseText: ko.unwrap(self.registrationmark) 
}); 
+0

謝謝馬修。我不認爲我的問題很清楚,所以我詳細闡述了它 – user1405195 2014-11-14 23:56:07

1

正如@sifriday所描述的,您可以將您的「變量」定義爲對象的屬性,可以按名稱查找。它們不一定必須在self中定義。它可以是一個單獨的對象:

var responses = { 
    DE63BEY: { ... }, 
    SL64KWX: { ... }, 
    CU56OHG: { ... }, 
    VN10YMY: { ... }, 
    Y926MNB: { ... } 
}; 

然後

responseText: responses[self.registrationmark()] 

如果由於某種原因,你需要定義值的變量,你可以使用eval動態讀取它們的值。 此方法可能不安全,不應使用。

responseText: eval(self.registrationmark())