2013-06-30 48 views
1

我有以下幾點:是否有更清晰的方式來寫出作爲對象一部分的多個函數?

$scope.modalReset = function() { 
     gridService.modalReset($scope); 
    } 

    $scope.rowAction = function (action, row) { 
     gridService.rowAction(action, $scope, row, 'Question'); 
    } 

    $scope.submitItem = function (formData) { 
     gridService.submitItem($scope, 'Question', formData); 
    } 

有沒有辦法,這些函數調用可以更簡單地寫。我不想將它們結合起來。有作爲範圍對象的一部分的所有功能。

+2

「更簡單」是相當模糊,很難不知道一個整體來回答很多關於這個代碼在 – Bojangles

+0

執行的上下文我不想結合。只是給了這裏的功能。三個函數都是$ scope的一部分。有沒有不同的方式來寫上述內容。它看起來很笨拙。如果答案是「否」,那麼我認爲這很好。 – Alan2

+0

我知道你不想將它們結合起來。我認爲你在做什麼很好。如果你想完全覆蓋'$ scope'(我認爲你不想這麼做,因爲這是Angular代碼?),那麼你可以爲它分配一個包含你的函數的對象。 – Bojangles

回答

0

如果你正在尋找封裝這些樹函數的方法,那麼有兩種方法可以想到。

方法1:with聲明(請不要使用這種方法它有problemslots。)

with ($scope) { 
    modalReset = function() { 
     gridService.modalReset($scope); 
    }; 

    rowAction = function (action, row) { 
     gridService.rowAction(action, $scope, row, "Question"); 
    }; 

    submitItem = function (formData) { 
     gridService.submitItem($scope, "Question", formData); 
    }; 
} 

方法2:對象文本(這是推薦的方法。)

define($scope, { 
    modalReset: function() { 
     gridService.modalReset($scope); 
    }, 
    rowAction: function (action, row) { 
     gridService.rowAction(action, $scope, row, "Question"); 
    }, 
    submitItem = function (formData) { 
     gridService.submitItem($scope, "Question", formData); 
    } 
}); 

此方法需要一個名爲define函數:

function define(obj, props) { 
    for (var key in props) 
     if (props.hasOwnProperty(key)) 
      obj[key] = props[key]; 
} 

我希望這會有所幫助。

+0

'with'聲明根本不起作用(除非這三個屬性之前已經定義過) – Bergi

+0

@Bergi Lol。我的錯。我從不使用'with',所以我不知道。如果我使用'var'聲明它會起作用嗎? –

+0

不,'with'只引入一個新的查找範圍。用於[變量/函數]聲明的* variableEnvironment *保持不變 – Bergi

0

如果你使用jQuery,您可以使用$.extend

$.extend($scope, { 
    modalReset: function() { 
     gridService.modalReset($scope); 
    }, 
    rowAction: function (action, row) { 
     gridService.rowAction(action, $scope, row, "Question"); 
    }, 
    submitItem = function (formData) { 
     gridService.submitItem($scope, "Question", formData); 
    } 
}); 
0

這就像你正在使用AngularJS($scope等)。在這種情況下,使用angular.extend()這樣的:

angular.extend($scope, { 
    modalReset: function() { 
    ... 
    }, 

    ... 
}); 
0

有沒有辦法,這些函數調用可以更簡單地寫

他們是函數的定義,而不是調用:-)有沒有他們的內容之間有很大的相似性,所以你目前的方式很好 - 如果你不喜歡三重任務,你可以使用其他答案中提出的extend功能。

但如果gridService方法有一個更統一的簽名,就像

$scope.modalReset = function() { 
    gridService.modalReset($scope); 
}; 
$scope.rowAction = function (action, row) { 
    gridService.rowAction($scope, 'Question', action, row); 
}; 
$scope.submitItem = function (formData) { 
    gridService.submitItem($scope, 'Question', formData); 
}; 

那麼你可能會縮短到

["modalReset", "rowAction", "submitItem"].forEach(function(methodName) { 
    $scope[methodName] = gridService[methodName].bind(gridService, $scope, "Question"); 
}); 
相關問題