2014-07-13 24 views
3

我的編程經驗主要在PHP,JavaScript和一些Python中。我已經看到了「依賴注入」這個術語,我已經做了一些搜索,但我仍然有點困惑。 This似乎是一個高度評價的帖子,但我仍然不滿意(要麼或我只是無望)JavaScript中的依賴注入/ Knockout.js

接受後使用的例子是....

public SomeClass (MyClass myObject) { 
    this.myObject = myObject; 
} 

我我用了一下knockout.js,並且已經注意到設置對象值的類似場景。將參數從ReservationsViewModel傳遞給SeatReservation函數以將對象設置爲依賴注入?我評論了我想知道的兩條線。

function SeatReservation(name, initialMeal) { 
    var self = this; 
    self.name = name; 
    self.meal = ko.observable(initialMeal); 

    self.formattedPrice = ko.computed(function() { 
     var price = self.meal().price; 
     return price ? "$" + price.toFixed(2) : "None";   
    });  
} 


function ReservationsViewModel() { 
    var self = this; 

    self.availableMeals = [ 
     { mealName: "Standard (sandwich)", price: 0 }, 
     { mealName: "Premium (lobster)", price: 34.95 }, 
     { mealName: "Ultimate (whole zebra)", price: 290 } 
    ];  

    self.seats = ko.observableArray([ 
     //dependency injection????? 
     new SeatReservation("Steve", self.availableMeals[0]), 
     new SeatReservation("Bert", self.availableMeals[0]) 
    ]); 

    self.totalSurcharge = ko.computed(function() { 
     var total = 0; 
     for (var i = 0; i < self.seats().length; i++) 
      total += self.seats()[i].meal().price; 
     return total; 
    });  

    self.addSeat = function() { 
     //dependency injection????? 
     self.seats.push(new SeatReservation("", self.availableMeals[0])); 
    } 
} 

將參數傳遞給SeatReservation函數以設置「新SeatReservation」對象的數據時,是否將它視爲依賴項注入?

如果它不是依賴注入,那麼這些對象的設置方式是否有特定術語?

回答

3

不,真正的DI需要控制反轉,你應該注入在ReservationsViewModel

SeatReservation類型做

function ReservationsViewModel(seatReservation) { 
    ... 
    self.seats = ko.observableArray([  
     new seatReservation("Steve", self.availableMeals[0]), 
     new seatReservation("Bert", self.availableMeals[0]) 
    ]); 
} 

會更正確。您還應該使用AMD注入的依賴

+0

什麼函數將SeatReservation作爲參數傳遞給ReservationsViewModel?它是SeatReservation函數調用中的一個參數嗎? – user3476345

+0

這將是您在問題中首先定義的'SeatReservation'函數。 – Anders

+0

我爲什麼要用'AMD'?你的意思是'require.js'? – hellboy

0

將從ReservationsViewModel傳遞參數給 SeatReservation函數來設置對象被視爲依賴 注入?

是傳遞參數給 SeatReservation功能設置「新SeatReservation」對象的 數據時,它認爲依賴注入?

如果它不依賴注入,有沒有爲這些對象被設置 方式的任何特定術語?

這更像是在JavaScript中的instantiating a class。在這種情況下,SeatReservation是帶有「構造函數」的類,它需要2個參數。