实际的scope examples提供了传递给查询的硬编码参数的使用:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
cell.widthConstraint.constant = UIScreen.main.bounds.width / 3
是否可以使该参数动态化,并使其范围如下:
DriverManager.getConnection("jdbc:mysql://localhost:3306/login?serverTimezone=UTC","root","Password");
使用示例:
public class Employee extends Model {
static {
addScope("byDepartment", "department = 'marketing'");
}
}
谢谢。
答案 0 :(得分:1)
当前实现仅适用于硬编码范围。通常,具有动态作用域与在where()
方法中仅具有一个附加参数没有什么不同,但是会使实现复杂化。
这个问题促使人们进行一些哲学上的讨论。通常,您会将模型用作其自身的服务。换句话说,从模型外部使用这样的模型不是首选方法:
List<Employee> employees = Employee.scope("byDepartment").where("start_date > ?", startDate);
最好将对EMPLOYEES
表的所有访问权包装到Employee
类中,如下所示:
public class Employee extends Model{
public static List<Employee> getStartedByDepartment(Date started, String department){
return Employee.scope(department).where("start_date > ?", started);
}
}
我们使用这种模式对所有JavaLite项目进行编码,并且不允许ActiveJDBC API泄漏外部模型(大部分情况下,哈哈)。
如您所见,范围很少给您提供,因为模型的内部实现可以使用也可以不使用范围,您将获得相同的结果。这种编码模式要好得多,因为:
if (department = null) throw new IllegalArgumentException("blah...")
但是,如果使用这种方法,则范围的值接近零。
不用说,我在工作中不使用范围。
答案 1 :(得分:0)
在像在Employee模型中那样使参数动态化时,我没有看到任何错误:
<img id="side1" onclick="side(0)" src="img1.jpeg">
<img id="side2" onclick="side(1)" src="img2.jpeg">
<img id="side3" onclick="side(2)" src="img3.jpeg">
<img id="side4" onclick="side(3)" src="img4.jpeg">
问题实际上出在
var sideimg = document.querySelectorAll('#side-img img');
var main = document.querySelector('#main');
function side(index) {
main.src = sideimg[index].src;
}
在scopeName旁边,public class Employee extends Model {
static {
addScope("byDepartment", "department = '?'");
}
}
无法为scopeValue提供额外的参数。
相反,您可以致电Employee.scope("byDepartment").where(....)
其中scope()
是您的scopeQuery,您可以使用Employee.where(subquery, params)
访问,而subquery
是您的scopeValue。